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

我有一个目录gitrepo1 。 这个目录是一个git仓库。

  • 我想把这个gitrepo1移动到另一个目录newrepo

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

  • gitrepo1现在应该是一个直接的(在newrepo里面),没有任何.git索引。 即。 它不应该再是一个独立的git仓库或子模块。

我怎样才能做到这一点?

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

一旦你创buildnewrepo ,把gitrepo1的目的地可以在任何地方,即使在newrepo如果你想要它。 它不会改变程序,只是你写回gitrepo1的path。