Что-то не так с использованием Git, как это? - PullRequest
3 голосов
/ 25 октября 2009

Вот моя ситуация. Я храню набор файлов как на своем ноутбуке, так и на сервере. У меня уже есть настройка синхронизации между двумя местоположениями с помощью rsync. Недавно я решил, что определенная часть этих файлов должна находиться под контролем исходного кода. Я использую git для этого.

Итак, у меня есть shared/, который я синхронизирую с помощью rsync. Тогда у меня есть shared/stuff/, который находится под контролем git. Я буду использовать git из обоих мест в хранилище, которое является локальным. Я работаю только с одной копией за раз, и я всегда синхронизирую файлы туда и обратно.

Я единственный, кто имеет дело с этими файлами, и эти два места - единственные места, где существуют эти файлы. Единственная причина, по которой у меня есть git, заключается в том, что только сегодня я случайно удалил некоторый код и не смог его вернуть.

Итак, мой настоящий вопрос: rsync делает что-нибудь, что сломает git? Или наоборот?

Редактировать: Для любопытных причина, по которой я использую rsync для синхронизации вместо git, заключается в том, что у меня уже есть отличная система для синхронизации общей папки / папки, и я хотел бы сохранить в ней репозиторий git.

Ответы [ 3 ]

4 голосов
/ 25 октября 2009

В этом нет ничего плохого.

Помните, что объекты git: коммиты, деревья и BLOB-объекты являются неизменяемыми, поэтому хранилище объектов git похоже на журнал, вы только записываете в него новые объекты, не удаляя ничего, даже когда вы «переписываете историю». Не раньше git gc ты остановишь мир и подрежешь. Git затрудняет потерю данных.


Если ваш репозиторий очень большой и вы перепаковываете его, rsync должен снова перенести всю базу данных объектов, поскольку git упаковывает все в новый, большой файл пакета. Если вы хотите перепаковать, вы можете использовать вместо этого git repack, что создаст новые пакеты для новых объектов, не касаясь старых. Или вы можете повторно упаковать товар и отметить большой файл для хранения:

Если у вас есть файл пакета с именем .git/objects/pack-fe017c0e9ea12841cd29458df7bd4421c2b12458.pack, просто создайте файл с именем .keep рядом с ним:

touch .git/objects/pack-fe017c0e9ea12841cd29458df7bd4421c2b12458.keep

Теперь, git gc не будет переписывать этот файл пакета, но он возьмет все другие маленькие пакеты и объекты и соберет их вместе. Отличие от git repack в том, что вы не будете собирать множество файлов небольших пакетов.

3 голосов
/ 25 октября 2009

Я делаю это все время, но с Unison вместо rsync. Разница в том, что если вы случайно что-то измените на обеих машинах, Unison обнаружит проблему. А в Unison даже встроен алгоритм rsync!

3 голосов
/ 25 октября 2009

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

...