Git создает файлы, но затем странным образом удаляет их снова - PullRequest
1 голос
/ 04 февраля 2011

Я сейчас использую Git со своего компьютера с Windows.

Я клонирую репозиторий, делаю некоторые изменения и нажимаю.

Пока все не работает нормально.

Нонапример, когда я фиксирую файл test.txt в локальной папке и нажимаю

, просматриваю мое удаленное хранилище и выполняю

git log: показывает сообщение о фиксации

gitстатус: файл удален "test.txt"

Что это?

Почему 'файл удален "test.txt"'?

Файл должен быть создан!

Затем я могу зафиксировать изменение удаления файла, и когда я снова вытягиваю в свою локальную папку, файл get снова удаляется и в локальной папке.

Любая помощь?

С уважением, Джерн.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2011

Вы упоминаете, что используете gitosis, но из предоставленной вами команды я могу сделать единственный вывод, что ваша настройка gitosis полностью нарушена.

Первое, что я замечаю, это то, что вас просят ввести пароль, и онПохоже, вы ввели его, и нажатие продолжилось.Сервер никогда не должен запрашивать пароль, если это так, то это признак того, что вы не предоставляете правильную пару ключей ssh ​​серверу или сервер неправильно настроен и должен привести к прерванной попытке отправки, так как использование учетной записи не должноиметь пароль установлен.Использование пароля означает, что вы переопределяете все, для чего предназначен gitosis, и вы можете просто удалить его, потому что он вообще не используется.

Второе, что я заметил, это то, что вы подталкиваете к /var/www/saris/.gitкоторый в соответствии со стандартным соглашением об именах указывает на непроявленное репо.Опять же, вы, кажется, ходите вокруг всего, что делает гитоз, потому что он работает только с голыми репозиториями.Кроме того, именно поэтому вы не видите изменений на сервере.При переходе к репозиторию без использования репозитория рабочее дерево никогда не обновляется, поэтому эффект, который вы пытаетесь получить (обновление веб-сайта в / var / www / saris), не будет работать.См. https://git.wiki.kernel.org/index.php/GitFaq#non-bare и http://toroid.org/ams/git-website-howto для получения дополнительной информации о репозиториях, не являющихся открытыми, и об управлении веб-сайтами с помощью git.

Кроме того, я хотел бы указать, когда это возможно, на то, что гитоз не поддерживается и не рекомендуетсясообщество git в пользу превосходящего gitolite .

РЕДАКТИРОВАТЬ: Вы полностью удалили исходный вопрос и заменили его другим несвязанным вопросом и потеряли все исходные детали,Вы должны были просто создать новый вопрос, но я все равно отвечу на ваш новый вопрос.

Ваш новый вопрос по сути является одним из самых простых и распространенных git-вопросов.Его так часто спрашивают, что в нем есть часть GitFaq , которую я скопировал сюда и даже связал, когда ответил на ваш оригинальный вопрос.

Почему победиля вижу изменения в удаленном репо после «git push»?

Операция push всегда связана с распространением истории репозитория и обновлением ссылок, и никогда не затрагивает файлы рабочего дерева.В частности, если вы нажмете обновить ветку, извлеченную в удаленном хранилище, файлы в рабочем дереве не будут обновлены.

Это предупредительное проектное решение.Рабочее дерево удаленного репозитория может иметь локальные изменения, и у вас нет возможности разрешить конфликт между передаваемыми вами изменениями и изменениями в рабочем дереве.Тем не менее, вы можете легко сделать хук после обновления, чтобы обновить рабочую копию извлеченной ветки.Причина, по которой этот пример не используется по умолчанию, заключается в том, что он уведомляет человека, выполняющего толчок, только в случае возникновения проблемы.Последний черновой вариант перехвата после обновления для этого в http://utsl.gen.nz/git/post-update,, который имеет дело почти со всеми случаями, за исключением случаев, когда уже существует конфликтующее слияние на удаленной стороне (поскольку git-stash в настоящее время не может спрятать это).Он также не работает в тех случаях, когда это возможно, например, ни один из файлов на самом деле не конфликтует.

Быстрое правило: никогда не загружать репозиторий, к которому прикреплено рабочее дерево, пока вызнать, что вы делаете.

Если вы уверены, что делаете, вы можете выполнить «git reset --hard» на стороне, на которую вы нажали.Обратите внимание, что это потеряет ВСЕ изменения, которые вы сделали на этой стороне, сбрасывая рабочее дерево до последней ревизии, которую вы нажали.Смотрите эту статью о голых репозиториях для деталей.

Снова, пожалуйста, прочитайте http://toroid.org/ams/git-website-howto, который я связал, когда ответил на ваш первый вопрос.Если вы воспользуетесь этим решением, у вас не возникнет этой проблемы.

0 голосов
/ 05 февраля 2011

При нажатии вы получите ошибку отклонения, если ваши коммиты не являются ускоренной пересылкой на удаленном репо (например, кто-то еще выдвинул изменения в удаленном репо).Самый простой способ исправить это - сделать git pull, который будет извлекать изменения, и выполнить автоматическое объединение.

Если вы используете несколько веток, Git по умолчанию пытается нажать all из них - не только текущая ветка, в которой вы находитесь.Это может привести к некоторым запутанным сообщениям, которые покажут несколько успешных или отклоненных строк. Этот вопрос имеет некоторую конфигурацию, которую вы можете добавить, чтобы изменить это поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...