如何将git存储库移动到另一个目录并使该目录成为git存储库?

时间:2013-09-30 14:49:23

标签: git

我有一个目录 gitrepo1 。该目录是一个git存储库。

  • 我想将此 gitrepo1 移至另一个目录 newrepo

  • 目录 newrepo 应该是新的git存储库,不会丢失git历史记录,并且应该包含目录 gitrepo1

  • 目录 gitrepo1 应该只是一个目录(在 newrepo 内),没有任何.git索引,即它应该不再是一个独立的git存储库或子模块。

我该怎么做?

4 个答案:

答案 0 :(得分:83)

这很简单。 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的路径。

答案 1 :(得分:6)

它甚至更简单。刚刚做到了(在Windows上,但应该在其他OS上也可以):

  1. 创建 newrepo
  2. gitrepo1 移至 newrepo
  3. .git gitrepo1 移动到 newrepo (向上一级)。
  4. 提交更改(根据需要进行修复跟踪)。

Git只是看到您添加了一个目录并重命名了一堆文件。没关系。

答案 2 :(得分:4)

我不是专家,但是我将.git文件夹复制到一个新文件夹,然后调用:git reset --HARD

答案 3 :(得分:2)

有点晚了,这个问题已经回答了,但是要做到没有任何头痛:

  1. 使用git status在较旧的git文件夹中查看您当前所在的分支,假设分支 development
  2. 将目录更改为新的git文件夹,然后将项目从存储库git clone更改为新文件夹
  3. 在新文件夹中检出当前分支:git checkout development
  4. 使用rsync与新文件夹同步,排除.git文件夹rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

那么您可以从上次中断的地方继续