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

czq61nw1  于 2022-12-10  发布在  Git
关注(0)|答案(6)|浏览(357)

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

  • 我想将此gitrepo1移动到另一个目录newrepo中。
  • 目录newrepo应该是新的git存储库,不丢失git历史记录,并且应该包含目录gitrepo1
  • 目录gitrepo1现在应该只是一个目录(在newrepo内),没有任何.git索引,也就是说,它不应该再是一个独立的git仓库或子模块。

我该怎么做?

k4aesqcs

k4aesqcs1#

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

vbkedwbf

vbkedwbf2#

它甚至比这更简单。只是这样做(在Windows上,但它应该在其他操作系统上工作):
1.创建新存储库
1.将gitrepo1移动到新的存储库中。
1.将**.gitgitrepo1移动到newrepo**(向上一级)。
1.提交更改(根据需要修复跟踪)。
Git只是看到你添加了一个目录,并重命名了一堆文件。没什么大不了的。

ukxgm1gy

ukxgm1gy3#

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

y1aodyip

y1aodyip4#

要做到这一点,没有任何头痛:
1.检查gitrepo1git status的当前分支是什么,假设分支 “development”
1.将目录更改为newrepo,然后从存储库中git clone该项目。
1.将newrepo中的分支切换到上一个分支:git checkout development .
1.使用rsyncnewrepo与旧版本gitrepo1同步,不包括.git文件夹rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1。当然,您不必使用rsync执行此操作,但它执行起来非常流畅。

优点:

您可以从上次中断的地方继续:旧分支、未暂存的更改等。

r1wp621o

r1wp621o5#

一个简单的方法,移动一个git仓库到另一个目录,并使该目录成为一个git仓库使用镜像方法
git clone --mirror git@example.com/mirror-repository.git
cd mirror-repository.git
使用以下命令将更改推送到新存储库
git push --mirror git@example.com/new-mirror.git
这将获取镜像库中可用的所有分支和标记,并将它们复制到新位置。
不要在没有被--mirror克隆的仓库中使用git push --mirror,它会用你的本地引用(和本地分支)覆盖远程仓库。git clone --mirror比git clone --bare更受欢迎,因为前者也会克隆git notes和其他一些属性。

hujrc8aj

hujrc8aj6#

对于我在windows上它与xcopy一起工作。copy命令不复制隐藏文件。从根文件夹运行此命令:
xcopy subfolderofRepo .\ /s /e /h

相关问题