2011-02-04 3 views
1

Я использую Git сейчас с моей Windows-машины.Git создает файлы, но затем странно их удаляет

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

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

Но когда я совершаю, например, test.txt в моей локальной папке и толчке,

затем заглянуть в мой удаленный репозиторий и сделать

журнал

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

мерзавца статус: файл удален «test.txt»

Что это?

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

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

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

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

Ваш, Joern.

+0

Можем ли мы увидеть все сообщения об ошибках? –

+0

Когда вы говорите «ничего не изменилось», вы имеете в виду, что копия удаленного репо - это не-голый репозиторий и что рабочий каталог не изменился? (Как правило, вы нажимаете на голый репозиторий, у которого нет рабочих файлов, push не будет изменять эти файлы, если они существуют.) –

+0

hm, важно сказать, я Git newb; на моей последней работе мы использовали Git, но все было предварительно сконфигурировано. Можно было обновить весь репо, хотя файлы существовали, и когда он существовал и был изменен, он был обновлен, и вы могли выявить различия. –

ответ

3

Вы упоминаете, что используете гитоз, но из вывода команды вы предоставили мой единственный вывод, что ваша установка 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.

EDIT: Вы полностью удалили исходный вопрос и заменили его другим несвязанным вопросом и потеряли все оригинальные детали. Вы должны были просто создать новый вопрос, но я все равно отвечу на ваш новый вопрос.

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

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

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

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

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

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

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

+0

в начале следующей недели. Я проверю свой gitosis conf или поменяю на gitolite, затем я говорю обратно. –

+0

спасибо за ваш ответ; Я заменил старый вопрос, чтобы сэкономить на вопросах, может быть, согласен со стандартными форумами –

+0

Я получаю ту же ошибку, что и в этом вопросе, даже если я буду использовать ваш учебник –

0

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

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

+0

Это похоже на ошибку в сети (или удаленном диске), а не на ошибку быстрой перемотки вперед. Быстрая перемотка вперед обычно печатает большое объяснение (которое может быть переключено в config, AFAIR, хотя). –

+0

, поэтому я вхожу в git config push.default - это ничего не меняет –

+0

Локальные права правильны при удаленном репо? –

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