2013-04-19 6 views
0

Таким образом, меня преследовала эта странная проблема git, которую я и некоторые другие разработчики не смогли решить. Вот он:Bare Git repo не может добавлять файлы или файлы фиксации

Я создал голый репо для управления изменениями веб-сайта с использованием git на тестовом сервере. Для этого примера репо здесь: /home/website/website.git Сайт общественного корневая будет здесь:/Главная/Сайт

Я создал репозиторий, выполнив команду: мерзавец INIT --bare внутри каталог git repo «website.git»

Далее У меня есть местное репо на машине в другом месте. Это стандартное git-репо. Я создаю сайт, чтобы он был готов к развертыванию. Когда он готов, я подталкиваю его к голой репо. Из моего местного репо. Существует крюк post-receive, который проверяет последнее дерево файлов в общедоступном корневом каталоге веб-сайта. Поэтому, когда я меняю вещи на локальном репо и тестирую их в среде localhost, как только я доволен, я могу нажать их на живой сервер.

Вот проблема, с которой я сталкиваюсь: Я могу толкнуть штраф. Без вопросов. Все работает так, как ожидалось. Код получает доступ к общедоступному корню. Все счастливы и продолжают свою жизнь.

BUT !!!: Сайт является сайтом CMS. Пользователи подключаются к ней и загружают вещи. Файлы создаются в общедоступном корне сайта, который является GIT_WORK_TREE.

Так что NBD правильно ?! Я могу просто передавать файлы время от времени из живого репо и возвращать их в свою локальную среду, как раньше. Поэтому я вхожу в SSH на сервере. Перейдите к /home/website/website.git Затем запустите эту команду: GIT_WORK_TREE =/главная/сайт/мерзавец добавить ../

Я получаю этот беспорядок:

error: unable to create temporary sha1 filename ./objects/cb: No such file or directory 
error: error_log: failed to insert into database 
error: unable to index file error_log 
fatal: adding files failed 

Я сделал это раньше на других серверах, и он отлично работал от того, что я помню. Поэтому я был похож на WTF, на этом сервере должно быть что-то странное. Я пошел на другой сервер, который у меня есть, и воспроизвел ТОЧНЫЕ те же шаги. Получил ТОЧНУЮ ту же проблему. Так что теперь я боюсь, что я потеряю рассудок, и, возможно, эти предыдущие жизненные впечатления все в моей голове ... * Ну, давайте не будем так далеко ... :)

Может быть, кто-нибудь может мне помочь прочь. Я использовал git много и, похоже, не расковыл это.

О, некоторые другие, возможно, полезные функции: работает CentOS 6.2

Я проверил, все разрешения. Я даже попытался изменить все на рекурсию 777, чтобы убедиться, что Im не потерял его каким-то образом. Убедитесь, что все файлы принадлежат правильному пользователю. рекурсивно. Я также попробовал стандартное решение этой проблемы, которое описано здесь: https://answers.atlassian.com/questions/132671/git-commit-fails-with-sourcetree-error-unable-to-create-temporary-sha1-filename-git-objects-d8-file-exists Это тоже не сработало. Не уверен, куда идти отсюда.

ПОЖАЛУЙСТА, ПОМОГИТЕ МЕНЯ !!!! Я чувствую, что Линус сейчас играет на меня жестокие трюки.

ответ

0

Я получил решение. Это оно. Я выполнил вышеуказанную команду из git repo.

Оказывается, команда должна быть запущена из работы дерева и изменена, чтобы выглядеть следующим образом:

GIT_WORK_TREE=/home/website/ git --git-dir="./website.git/" add ./ 
1

У вас есть готический репозиторий git в /home/website/website.git, который находится внутри репозитория git в/home/website? И затем вы пытаетесь обмануть голый репозиторий git, имея рабочее дерево, используя GIT_WORK_TREE?

Возможно, стоит понять эту настройку, но только если вы намерены стать разработчиком git. Поскольку вы ориентируетесь на предоставление функций веб-сайта, я предлагаю использовать стандартную настройку git.

Перемещение голого репозитория в другом месте:

$ mkdir /home/repo 
$ mv /home/website/website.git /home/repo/website.git 
$ cd /home/website 
$ git remote set-url origin /home/repo/website.git 
+0

Спасибо за ответы. Я постараюсь реализовать это решение завтра утром. У вас есть представление о том, почему проблемы с разрешениями? –

+1

@GoZoner Я думаю, что вам не хватает шага или два, и URL-адрес 'set-url' неверен. Поскольку '/ home/website' на самом деле не является git-репо, он, вероятно, должен установить это с помощью' git init' до последнего шага. И URL должен быть '/ home/repo/website.git', нет? Вероятно, ему нужно получить и синхронизировать ведущую ветвь с текущим мастером репо. – jszakmeister

+0

Спасибо./home/website уже является хранилищем .git. Я исправил цель set-url. – GoZoner

Смежные вопросы