Клонирование репозитория, не делая его исходным удаленным - PullRequest
23 голосов
/ 12 февраля 2010

Я клонирую репозиторий git с компьютера, который будет стёрт.

Можно ли клонировать репозиторий, не создавая оригинальный репозиторий origin/master? Или мне нужно его клонировать, а затем удалить удаленную ветку (что делается с помощью git remote rm origin)?

Редактировать : Хранилище имеет только одну ветвь и без тегов.

Ответы [ 5 ]

22 голосов
/ 12 февраля 2010

Нет необходимости делать исходный репозиторий "удаленным" источником, чтобы клонировать главную ветвь.

На новом компьютере создайте новый репозиторий:

git init foo

Затем перетащите старый репозиторий в новый, не создавая удаленный:

cd foo
git pull <reference to old repository>

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

Как отмечено ниже, при копировании хранилища будьте осторожны при переходе от файловых систем, чувствительных к регистру (например, Linux, Mac, NTFS), к регистру, не чувствительному к регистру (например, Fat32).

7 голосов
/ 12 февраля 2010

Во-первых, вы можете использовать --origin <name> вариант git clone

- происхождение , -o

Вместо использования удаленного имени origin для отслеживания восходящего репозитория, используйте .

Во-вторых, вы можете использовать git remote add, чтобы добавить хранилище для извлечения из существующего хранилища (так что вы можете использовать git init, затем git remote add <name> <url>).


Если вы хотите создать зеркало репозитория, когда refs/heads/* входит в refs/heads/* в клоне, вы можете init репозиторий, настроить соответствующий refspec, а затем fetch ...

Или вы можете использовать git clone --mirror, который должен ответить на текущую версию вопроса ОП.

Однако это не сохранит конфигурацию (включая удаленные), состояние рабочего дерева, повторные журналы и т. Д. Для этого вам потребуется скопировать весь репозиторий, как Джесс Бауэрс сказала .

3 голосов
/ 12 февраля 2010

Общий способ обработки такого перевода: git bundle. См. Резервное копирование github repo .

Со второго (нового) рабочего стола:

git bundle create file:///\\oldDesktop/share/myGitRepo --all

для создания одного локального файла, из которого вы сможете клонировать локальное git-репо.

Примечание: протокол file:/// будет поддерживать путь Windows UNC (Universal Naming Convention), а остальная часть пути будет использовать '/' вместо '\'. См. Git на Windows Lan .

2 голосов
/ 12 февраля 2010

Есть ли у удаленного репо больше веток, чем у мастера? Это сложнее, если да; Вам также необходимо сделать локальные копии всех ветвей, потому что когда вы удаляете удаленный, все удаленные / исходные ветви исчезнут. (Я только что попробовал!)

Итак, вы можете сделать что-то вроде этого:

git clone <remote_url>
cd <repo>
for b in $(git branch -r | grep -v HEAD | grep -v master);do
    git branch $(basename $b) $b
done
git remote rm origin

Конечно, как сказала Джесс Бауэрс, еще проще просто скопировать или сжать архив и переместить файлы, если для этого у вас есть доступ к машине.

Вы также можете просто сделать голый клон:

git clone --bare <remote_url>

и затем создайте новые клоны из этого.

2 голосов
/ 12 февраля 2010

Я верю, что вам нужно удалить удаленную ветку.

...