Можно ли настроить Git или Mercurial для обхода локального хранилища и перехода прямо к центральному? - PullRequest
1 голос
/ 06 июня 2010

Используя Git или Mercurial, если рабочий каталог составляет 1 ГБ, то в локальном хранилище будет еще 1 ГБ (как минимум), обычно находящееся на том же жестком диске. А затем, когда он будет отправлен в центральное хранилище, будет еще 1 ГБ.

Можно ли в Git или Mercurial использовать только рабочий каталог, а затем центральный репозиторий, не имея 3 копий этих 1 ГБ данных?

(на самом деле, когда центральный репозиторий также update, тогда есть 4 копии одних и тех же данных ... можно ли их уменьшить? В сценарии SVN, когда есть 5 пользователей, тогда будет 6 ГБ данных Всего. С распределенным контролем версий, тогда будет 12 ГБ данных?)

Обновление: это странно - я только что попытался посмотреть на проект, клонированный с помощью Mercurial: рабочий каталог, не содержащий папку .hg, составляет 126 МБ, а папка .hg - 239 МБ. И это новый клон ... потому что мой новый репозиторий на самом деле содержит всю историю / ревизии, поэтому он в два раза больше рабочего каталога?

Ответы [ 3 ]

3 голосов
/ 06 июня 2010

Git или Mercurial - это распределенные системы контроля версий. Это означает, что каждая касса содержит всю историю проекта. Обход этого может лишить цели использования DVCS (каждая операция может выполняться в автономном режиме).

Но в целом Mercurial или Git имеют очень высокую степень сжатия, часто лучше, чем svn, даже если они хранят всю историю.

0 голосов
/ 14 июня 2010

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

Из cmd.exe:

git --git-dir=Z:/path/to/git_repo_dir --work-tree=C:/path/to/checkout/root checkout master

И вы можете сделать это для любого количества проверок, но это не совсем идеально. Это правда, что git работает не так хорошо в Windows, как в Linux - идеальное решение для каждого клона иметь жесткие ссылки на объекты, поэтому они физически сохраняются на диске только один раз, и тогда каждый клон может перейдите в другую ветку, чтобы вы могли одновременно отслеживать разработку / тестирование / производство, например.

Кроме того, что касается вашей озабоченности по поводу использования диска - попробуйте сделать git gc --aggressive --prune в одном из ваших репозиториев и посмотреть, занимает ли оно все еще огромное количество места. По моему опыту, git очень хорош в хранении только двоичных дельт - я проверил это, добавив каталог, полный файлов MP3, в хранилище и зафиксировав их, изменив теги ID3, а затем зафиксировав изменения, и прежде чем я запустил git gc было явно две копии каждого MP3 в папке .git, но после git gc размер уменьшился до чуть большего размера, чем исходный рабочий каталог.

0 голосов
/ 06 июня 2010

hg clone создает жесткие ссылки в файловых системах Unix, поэтому только пространство, внесенное новыми наборами изменений, использует пространство в хранилище. Если вам не нужна рабочая копия, вы можете обновить репо до «нулевой» ревизии, которая состоит только из репозитория без рабочей копии.

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

...