Локальная сила git-репо обновляется из удаленного git-репо. (развертывания толстого клиента) - PullRequest
2 голосов
/ 18 февраля 2010

Обновление: Я думаю, что это связано с проблемой с клиентом windows git msysgit.Извините, что беспокою вас, ребята.http://code.google.com/p/msysgit/issues/detail?id=379&colspec=ID%20Type%20Status%20Priority%20Component%20Owner%20Summary

Я ищу способ синхронизации нескольких клиентских ящиков с удаленным репозиторием git.Принудительное обновление из удаленного репозитория и отказ от всего, что могло измениться на клиентских ящиках.

Проблема, с которой я сталкиваюсь, заключается в том, что клиентские ящики изменят некоторые файлы (журналы установки и т. Д.) И выдаютмне кошмар слияния, когда мне нужно обновить их из удаленного репо.Я пробовал несколько команд, чтобы попытаться сбросить их локальные изменения (локальные изменения должны быть просто отменены), но, похоже, ни одна из них не работает так, как объявлено (git reset --hard).

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

Есть идеи?

Ответы [ 5 ]

5 голосов
/ 18 февраля 2010

Я полагаю, у вас есть веская причина для использования Git, а не rsync.

Вот как я это сделаю (на клиентах):

git fetch origin
git reset --hard origin/master
git clean -dfx

Обратите внимание, что вам нужно сбросить на origin/master, а не HEAD, потому что локальный HEAD не включает в себя новейшие коммиты источника (пока).

1 голос
/ 18 февраля 2010

Странно, git reset --hard должен удалить все изменения, сделанные в локальных репозиториях.

вы можете попробовать git stash && git pull, просто переместите изменения в какую-то временную ветку (git stash clear, чтобы удалить любоетрассировка изменений)

если это не сработает, вы можете попробовать это (при условии, что вы находитесь в основной ветке и что ветка tmp не существует)

git checkout origin/master -b tmp
git branch -D master
git branch -m master
1 голос
/ 18 февраля 2010

Следующие две команды должны вернуть рабочее дерево клиента в чистое состояние, т. Е. Идентично тому, как оно следовало за предыдущим git clone:

git reset --hard HEAD

Это приведет к отмене любых изменений, внесенных в файлы, которые отслеживаются (т.е. существуют в репо).

git clean -fdx

Это удалит все файлы, которые были недавно созданы клиентом, т.е. которые не отслеживаются git.

1 голос
/ 18 февраля 2010

Звучит так, будто вы ищете rsync, а не git. Не могли бы вы объяснить немного больше, почему вы хотели бы использовать полную систему контроля версий, чтобы "просто" синхронизировать некоторые файлы?

0 голосов
/ 27 сентября 2012

Кстати, эта первоначальная проблема, по-видимому, ограничена msysgit 1.6.5.1 ( выпуск 379 ), как указано в OP.

Однако в том же выпуске в 2012 году упоминается аналогичная проблема с другими причинами:

Для записи, у меня есть эта проблема с autocrlf = false.

Выполнение git reset --hard все еще оставляет незафиксированные изменения, связанные с правами доступа к файлу:

$ git reset --hard
HEAD is now at 088c702 BranchA

$ git diff

diff --git a/path/to/file b/path/to/file
old mode 100755
new mode 100644
...

Это связано с « Удаление файлов с надписью« старый режим 100755 новый режим 100644 »из неустановленных изменений в git "

Я обнаружил, что по какой-то причине core.filemode был установлен в true на уровне хранилища (я сам не устанавливал):

$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true

Итак: git config core.filemode false рекомендуется.

...