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

Как переместить репозиторий git в другой каталог и сделать этот каталог хранилищем git?

У меня есть каталог gitrepo1. Этот каталог является git-репозиторием.

  • Я хотел бы переместить этот gitrepo1 в другой каталог newrepo.

  • Каталог newrepo должен быть новым хранилищем git без потери истории git и должен содержать каталог gitrepo1.

  • Каталог gitrepo1 должен быть просто каталогом (внутри newrepo) без индекса .git, т.е. он больше не должен быть независимым репозиторием git или подмодулем.

Как я могу это сделать?

4b9b3361

Ответ 1

Это очень просто. Git не заботится о том, что имя его каталога. Это только заботит то, что внутри. Поэтому вы можете просто:

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

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

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

Как только вы создадите newrepo, место назначения для размещения gitrepo1 может быть где угодно, даже внутри newrepo, если вы этого захотите. Это не изменяет процедуру, просто путь, который вы пишете gitrepo1 назад.

Ответ 2

Это немного поздно, и на вопрос уже дан ответ, но, чтобы сделать это без головной боли:

  1. Посмотрите, в какой текущей ветке вы находитесь в более старой папке git с git status, скажем, разработка ветки
  2. Измените каталог на новую папку git, затем git clone проект из репозитория в новую папку
  3. Оформите текущую ветку в вашей новой папке: git checkout development
  4. Синхронизируйте новую папку со старой, используя rsync, исключая папку .git: rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

Тогда вы можете продолжить, где вы остановились