У меня есть каталог gitrepo1 . Этот каталог является репозиторием git.
Я хотел бы переместить этот gitrepo1 в другой каталог newrepo .
Каталог newrepo должен быть новым репозиторием git без потери истории git и должен содержать каталог gitrepo1 .
Каталог gitrepo1 теперь должен быть просто каталогом (внутри newrepo ) без какого-либо
.git
индекса, т.е. он больше НЕ должен быть независимым репозиторием git или подмодулем.
Как я могу это сделать?
mv girepo1 newrepo
??Ответы:
Все очень просто. Git не волнует, как называется его каталог. Его волнует только то, что внутри. Итак, вы можете просто сделать:
Обратите внимание, что копия стоит довольно дорого, если репозиторий большой и с большой историей. Вы тоже можете легко этого избежать:
После того, как вы создадите
newrepo
, место назначенияgitrepo1
может быть где угодно, даже внутри,newrepo
если вы этого хотите. Это не меняет процедуру, только путь, который вы пишетеgitrepo1
.источник
cp
как и почти каждая команда или функция, специфична для других ОС. Фактически, это характерно для каждой ОС, кроме Windows. Попробуйте позвонить в Microsoft и спросить, почему они не POSIX. Во всяком случае,cp
означает копию.mv
значит двигаться.rm
значит удалить. Вы можете найти эквиваленты Windows..git/
содержит всю историю, включая вашу последнюю фиксацию. Куда бы вы это ни поместили, у вас есть вся история. Фактически, если все файлы в этом каталоге отличаются от исходного репо, из которого вы взяли.git/
, единственное, что он говорит вам, что некоторые файлы удалены, а некоторые присутствуют. С agit reset --hard
удаленные файлы будут восстановлены автоматически! Единственное, что следует отметить, это то, что просто скопировав,.git/
вы не сможете восстановить незафиксированные изменения.Немного поздно, и на вопрос уже дан ответ, но, чтобы сделать это без головной боли:
git status
, скажем, в разработке ветки.git clone
проект из репо в новую папкуgit checkout development
rsync
, исключая папку .git :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1
Тогда вы можете продолжить с того места, на котором остановились
источник
Это даже проще, чем это. Просто сделал это (в Windows, но он должен работать в другой ОС):
Git просто видит, что вы добавили каталог и переименовали кучу файлов. Ничего особенного.
источник
Я не эксперт, но я копирую папку .git в новую папку, а затем вызываю:
git reset --HARD
источник