2014-06-12 3 views
0

Можно ли клонировать хранилище в git и не хранить все изменения?Clone git репозиторий без учета изменений локально

Мой репозиторий большой (десятки ГБ). Я не хочу удваивать пространство для хранения в рабочей копии. Я просто хочу файлы и знать, куда идти, чтобы нажать/вытащить обновления. Возможно ли это с помощью git или мне нужно вернуться к подрывной деятельности?

+1

«Мой репозиторий - десятки ГБ» - я думаю, что это проблема. Git предназначен для хранения * кода * (или аналогичного), по-видимому, все, что вы храните, нигде не приближается к коду! –

+0

@ OliCharlesworth Это правда, что это не строго код, но мы нуждаемся в нем под контролем версий. – jlconlin

+0

Вы можете использовать ссылочные репозитории или как «объекты/информацию/альтернативы» более низкого уровня, чтобы сохранить одну копию старой истории на каждом сайте (сайт, на котором компьютеры используют как минимум надежную общую файловую систему). Создайте голый репозиторий, чтобы получить старые теги, которые не будут меняться, добавьте путь '--reference/to/that/repo' к будущим клонов, которым не нужен быстрый доступ. Клоны, даже тех клонов, которые не задают -reference, получают полные копии, как обычно. – jthill

ответ

1

Вы можете создать «неглубокий» клон, но он делает репозиторий только для чтения, в который вы не можете извлечь или вставить его. Вот команда:. git clone repoUrl.git --depth 1 --branch branch_name

1

Я думаю, что ближайший вы собираетесь получить здесь использовать опцию --depth для git clone, чтобы ограничить количество истории, которая получает тянут в Это также означает, что вы не будете иметь все история доступна для git log и друзей - и вы не можете запустить git log против удаленного репозитория.

Это, как говорится, есть и другие биты. Git пытается собрать как объекты вместе, обеспечивая хорошее сжатие при сборке. Это означает, что сами файлы должны быть похожими. Это отлично подходит для исходного кода, но с некоторыми из ваших двоичных форматов оно может быть менее значительным.

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

+0

У нас уже есть данные (не бинарные) при управлении версиями. Git работает, но иногда это не очень быстро. – jlconlin

+0

Я думал, что использование '--depth 1' будет работать хорошо, но это не сильно изменило размер моего репозитория. В моем каталоге '.git' было 7,7 ГБ, папке' --depth 1' .git' было 7,2 ГБ. Команда, которую я использовал, была '$ git clone --depth 1 file: /// path/to/repo new_repo' – jlconlin

+0

Возможно, вы захотите рассмотреть только следующую команду' master', используя опцию '--single-branch' - вы можете для этого нужна более новая версия Git. В противном случае все ref будут иметь глубину 1, что может быть немного больше, чем вы рассчитывали (если бы у вас было еще 10 филиалов, git бы удостоверился, что для них тоже нужны необходимые объекты). Кроме того, вы можете отредактировать свой '.git/config' и изменить строку refspec, чтобы отображать только нужные вам ссылки (возможно, просто' master'). Вероятно, вам нужно запустить 'git gc', чтобы git удалил ненужные объекты из вашего локального клона. – jszakmeister

1

Можно ли клонировать хранилище в git и не хранить все изменения?

С не так уж много дисциплины, вы можете использовать --reference репозитории держать только один депо по всему сайту для крупных, стабильных частей РЕПО, где «Сайт» определяются как «машина с доступом к общей долевой файловой системе» ,

Чтобы сделать его безопасным в качестве общей файловой системы:

  1. сделать голую репо, публикующий только стабильные ссылки. Самый простой способ - сделать полный клон, а затем удалить все неустойчивые.

    git clone--bareu://r/l/to/real/upstream/path/to/reference/repo
    cd !$
    git tag -dall the tags that have even a whiff of instability about them
    git branch -Devery branch
    git rev-parseany-tag> HEAD

  2. Используйте этот репо в качестве ссылки.При клонировании реального вверх по течению,

    git clone --reference /path/to/reference/repo u://r/l/to/real/upstream

И это действительно все, что нужно использовать его в доме. Часть дисциплины заключается в том, что вы должны быть уверены, что файловая система с вашим депо на ней всегда доступна для чего-либо, ссылаясь на нее, и что никакие изменения в вашем депо никогда не оставляют неопознанную фиксацию. chmod -R a-w сделает это красиво.

Если люди клонировать этот путь к их ноутбукам и взять их где-нибудь без доступа к депо, они должны разъединить их клоны из депо первыми:

# disconnect from depot: 
git repack -Ad \ 
&& rm .git/objects/info/alternates 

Примечание:

Для действительно недоукомплектованные ноутбуки и действительно большие РЕПО, переупаковка может быть неудобной. Альтернативный способ:

# disconnect from depots, minimal cpu load for underpowered localhost: 
cp -r $(cat .git/objects/info/alternates) .git \ 
&& rm .git/objects/info/alternates 

Это также можно упаковать «только то, что вам нужно» для поездки дороги с git pack-objects и git rev-list. Вот один из способов сделать это:

# pack up what I have locally, mark it as reliably-present: 

git repack -l 
for pack in .git/objects/pack/*.pack; do 
    touch $pack.keep 
done 

# pack up everything I still don't have that might actually be useful 
# no need to list tags that are ancestors of other tags here: 

git rev-list --objects --all ^tag-I-dont-need ^another ^etc \ 
| git pack-objects --honor-pack-keep .git/objects/pack/pack 
mv .git/objects/info/alternates{,.inaccessible} 

# let git gc at what's here when needed 
rm .git/objects/pack/pack-*.keep 

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

1

Если клон будет находиться на том же томе файловой системы, используйте git clone --local.

Он использует жесткие ссылки для экономии места.

Посмотрите на странице руководства пользователя git-clone.

Это означает, что вы можете иметь полную историю, не увеличивая при этом потребность в пространстве.

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