Можно ли копировать (не клонировать) репозиторий git с помощью основных команд Unix?


22

Я довольно новичок в использовании git, и мне было интересно, можно ли копировать Git-репозиторий с помощью общих команд UNIX (например, cpили tar/ untag), а не через git clone.

Я нахожусь в ситуации, когда у меня есть производственная среда (виртуальная среда Python), в которой какой-то код проверен в git. Мне интересно, если это плохая идея с точки зрения мерзавца копировать всю среду, используя tarили что-то. Такой подход был бы удобен для создания быстрой копии кодовой базы / среды.

Меня беспокоит то, что, возможно, git clone ассоциирует какой-то уникальный идентификатор с рабочей копией, что может вызвать конфликты, если существуют две рабочие копии, где одна была скопирована из другой файловой системы.


Ничего себе, я оказался в этой ситуации, потому что некоторые файлы находились под контролем исходного кода, а некоторые - нет, и у меня были права доступа к файлам, которые мне нужно было сохранить. Я рад, что вы задали этот вопрос.
Джо С

Ответы:


21

Это прекрасно.

git хранит всю свою историю, коммиты и т. д. на месте - это фундаментальное свойство DCVS.

Технически говоря, он gitможет нормально работать с копируемыми репозиториями, работающими повсюду, потому что вся суть DCVS в том, что ему не нужно знать, что происходит вне какого-либо конкретного репозитория , и на самом деле нет, если вы не сообщите об этом .

Тот же принцип применяется здесь.


1
Насколько я понимаю, клонированный репозиторий будет содержать ссылку на родителя. Использование команды копирования ОС не создаст эту ссылку.
Тони

@ Тони Правда, но вы можете удалить эту ссылку, используя git remote remove origin, что мешает Git использовать родительский репозиторий в качестве восходящего потока.
new123456

2

Вы должны иметь возможность скопировать весь рабочий каталог в любое место в вашей системе и продолжать работать в обычном режиме при использовании Git, Hg или SVN. Я не могу комментировать другие СКМ.


0

Это более необычный вариант использования, но ...

Я видел, как repoутилита делает символические ссылки в .gitкаталоге. В этом случае, когда вы делаете копию, вы должны убедиться, что вы разыменовываете символические ссылки. Например:

cp -r -L <source-repo-dir> <destination-repo-dir>

0

Это нормально, но если вы собираетесь поделиться своим репо с кем-то еще, учтите следующее :

  • В вашем configфайле могут быть пульты, которые другому человеку может быть наплевать.
  • В вашей logsпапке будут ссылки, которыми вы, возможно, не захотите поделиться. Git великолепно позволяет вам делать неприятные вещи на вашем компьютере, пока вы не освоитесь с конечным результатом, а затем перенести его на пульт, чтобы (иногда) делиться им. Часть этой неприятной истории может быть в вашем журнале, поэтому лучше не делиться этим ИМХО.
  • Ваш info/excludeфайл может игнорировать некоторые файлы, которые вы хотите игнорировать.
  • Вы также можете иметь крючки, ветки и кучу других вещей, которые являются личными, и вы предпочитаете не делиться ...
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.