Подтвердить что ты не робот

Можно ли использовать скопированное репо?

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

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

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

[email protected] ~
$ git clone project/.git project2
Initialized empty Git repository in /home/itsadok/project2/.git/

[email protected] ~
$ rsync -a project/ project3/

[email protected] ~
$ 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 <[email protected](none)> 1242131284 +0300      clone: from /home/itsadok/project/.git
---
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](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 <[email protected](none)> 1242131284 +0300      clone: from /home/itsadok/project/.git
---
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

От реального хорошего Git Внутренние (Скотт Чакон) из Peepcode Press. (Стр. 44) Так что только ссылка на источник отсутствует, насколько мне известно/я вижу.

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

Ответ 3

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

git remote add origin /home/itsadok/project
git branch -f master origin/master

Ответ 4

Я ответил на аналогичный вопрос в Stack Exchange. Вот основные моменты, на которые стоит обратить внимание, если вы нашли этот ответ, потому что вы собираетесь поделиться своим репо с кем-то еще:

  • Возможно, в вашем файле config есть пульты, а другому человеку это может не понравиться.
  • В вашей папке logs будут ссылки, которыми вы, возможно, не захотите поделиться. Git великолепно позволяет вам делать неприятные вещи на вашем компьютере, пока вы не освоитесь с конечным результатом, а затем перенести его на пульт, чтобы (иногда) делиться им. Часть этой неприятной истории может быть в вашем журнале, поэтому лучше не делиться этим ИМХО.
  • Ваш файл info/exclude может игнорировать некоторые файлы, которые вы хотите игнорировать.
  • Вы также можете иметь крючки, ветки и кучу других вещей, которые являются личными, и вы предпочитаете не делиться...