Таким образом, меня преследовала эта странная проблема 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 Это тоже не сработало. Не уверен, куда идти отсюда.
ПОЖАЛУЙСТА, ПОМОГИТЕ МЕНЯ !!!! Я чувствую, что Линус сейчас играет на меня жестокие трюки.
Спасибо за ответы. Я постараюсь реализовать это решение завтра утром. У вас есть представление о том, почему проблемы с разрешениями? –
@GoZoner Я думаю, что вам не хватает шага или два, и URL-адрес 'set-url' неверен. Поскольку '/ home/website' на самом деле не является git-репо, он, вероятно, должен установить это с помощью' git init' до последнего шага. И URL должен быть '/ home/repo/website.git', нет? Вероятно, ему нужно получить и синхронизировать ведущую ветвь с текущим мастером репо. – jszakmeister
Спасибо./home/website уже является хранилищем .git. Я исправил цель set-url. – GoZoner