Безопасно ли использовать скопированное git-репо? - PullRequest
30 голосов
/ 12 мая 2009

Если я сделаю копию отслеживаемой папки, используя rsync -a или cp -R, могу ли я использовать копию, как если бы это был клон git, или это вызовет всевозможные странные проблемы? Это все работает на моем компьютере, так что никто больше не имеет доступа к хранилищу.

Очевидно, что git-клонированный каталог знает, откуда он был скопирован, поэтому я могу сделать git pull без указания источника, но, если я готов жить без этого, есть ли что-то, о чем мне нужно беспокоиться? *

В качестве эксперимента я создал небольшой проект, clone сделал его и rsync отредактировал его, diff отредактировал получившиеся папки. Вот результаты:

itsadok@quad ~
$ git clone project/.git project2
Initialized empty Git repository in /home/itsadok/project2/.git/

itsadok@quad ~
$ rsync -a project/ project3/

itsadok@quad ~
$ diff -r project2 project3
Only in project3/.git: COMMIT_EDITMSG
diff -r project2/.git/config project3/.git/config
7,12d6
< [remote "origin"]
<       url = /home/itsadok/project/.git
<       fetch = +refs/heads/*:refs/remotes/origin/*
< [branch "master"]
<       remote = origin
<       merge = refs/heads/master
Files project2/.git/index and project3/.git/index differ
diff -r project2/.git/logs/HEAD project3/.git/logs/HEAD
1c1
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131284 +0300      clone: from /home/itsadok/project/.git
---
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131066 +0300      commit (initial): first commit
diff -r project2/.git/logs/refs/heads/master project3/.git/logs/refs/heads/master
1c1
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131284 +0300      clone: from /home/itsadok/project/.git
---
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131066 +0300      commit (initial): first commit
Only in project2/.git/logs/refs: remotes
Only in project2/.git: packed-refs
Only in project2/.git/refs: remotes

Разница довольно большая, но, похоже, большая часть относится к ссылке на источник. Я прав?

Ответы [ 3 ]

28 голосов
/ 12 мая 2009

Это безопасно.

Разница в использовании «git clone» заключается в том, что он автоматически устанавливает исходный репозиторий, так что вы можете легко использовать «git pull» и «git push» для синхронизации двух репозиториев. Также «git clone» не копирует журналы, индекс и другую конфигурацию, локальную для репозитория. Он только копирует историю версий хранилища (и даже то, что может храниться на уровне байтов по-разному, потому что Git время от времени сжимает свою базу данных при использовании «git gc»).

Те различия, которые вы видите в вашем примере, заключаются в том, что rsnc скопировал также индекс рабочего каталога, журналы, а также потому, что rsync-copy не настроил удаленный источник. Существует довольно много файлов конфигурации и журналов, которые являются локальными для репозитория. Но нет опасности копировать их напрямую, например, при восстановлении резервных копий или перемещении хранилища в другой каталог / harddrive / machine.

4 голосов
/ 12 мая 2009

Когда вы клонируете чужие репозиторий, это в основном просто копии содержимое этого каталога к вашему компьютер.

Из настоящего блага Git Internals (Скотт Чакон) из Peepcode Press . (Стр. 44) Так что, насколько я понимаю, отсутствует ссылка на происхождение.

С наилучшими пожеланиями.

1 голос
/ 16 мая 2009

Это точно так же, ну, почти, если вы хотите то же самое в 'project3', просто сделайте:

git remote add origin /home/itsadok/project
git branch -f master origin/master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...