更改Git仓库目录位置。

297
使用 Git/Github for Windows,如果我有一个包含以下目录的代码库:C:\dir1\dir2,我需要做什么才能将代码库文件移动到C:\dir1?我可以通过复制和粘贴这些文件来实现,但在Git方面需要做什么?
我在GitHub上有这个代码库,我使用Git Bash和GitHub for Windows。

1
看看这个答案,它适用于将本地Git存储库移动到另一个文件夹或另一台计算机。 - rekenerd
14个回答

344

只需复制整个工作目录内容(包括隐藏的.git目录)。这将把整个工作目录移动到新目录,不会影响 GitHub 上的远程仓库。

如果您正在使用 GitHub for Windows,则可以使用上述方法移动存储库。但是,当您在应用程序中单击存储库时,它将无法找到它。要解决此问题,只需单击带有! 的蓝色圆圈,选择“查找”,然后浏览到新目录。


5
GitHub For Windows 如何跟踪本地 repo 呢?这方面一定有一些配置吧。 - user596075
4
当我在Windows上进行此操作时,它强制我创建一个新的代码库。 - 472084
1
@Jleagle,自此回答发布以来,他们可能已经更改了它。我会查看并在必要时更新我的答案。 - ctor
3
它不应该要求您创建一个新的仓库:如果出现了这种情况,显然您错过了一个git文件(可能是一个隐藏文件)。我也遇到了这个问题,当我再次尝试时发现我漏掉了一些文件。 - chesscov77
1
我使用的是Windows系统。在手动将文件夹移动到新位置后,我重新打开了Git GUI应用程序,并手动将项目文件夹重新定位到那里。这样对我来说是有效的。 - angularrocks.com
Necromancing对于“Github for Windows如何跟踪本地repo?”评论的答案是:如果使用GitHub Desktop,一旦您移动了本地文件夹并尝试在GitHub Desktop中打开repo,它将会提示您找不到该文件夹并要求您定位新的文件夹。 - Oskar Austegard

64

我不确定问题是什么,这里有两个答案:

如果您想要移动您的代码库:

只需复制整个代码库(包括其.git目录)。

.git结构中没有绝对路径,也没有任何阻止其移动的东西,因此移动后无需进行其他操作。所有指向GitHub的链接(请参见.git/config中)将像以前一样工作。

如果您想要移动代码库内部的文件:

只需移动文件,然后添加在git status中列出的更改。下一个commit将执行必要的操作。 您会很高兴地发现没有文件会被重复:在git中移动文件几乎是不需要成本的。


1
但是GitHub For Windows如何跟踪本地repo呢?那边一定有一些配置。 - user596075
@user596075,它在.git目录中。 - OrangeDog

52

如果你正在使用GitHub Desktop,请按以下步骤操作:

  1. 关闭 GitHub Desktop 和所有其他正在访问当前目录路径的应用程序。
  2. 将整个目录移动到新的目录位置。
  3. 打开 GitHub Desktop 并单击蓝色 (!) 的 "repository not found" 图标。然后会弹出一个对话框,你会看到一个" Locate... "按钮,点击它会打开一个弹窗,允许你将路径定向到新位置。

13

尽管之前的回答都似乎在说你可以只移动目录,且在.git结构中不存在绝对路径。但是当我使用Cygwin中的git时,我发现这并不是真的。

当我移动我的git存储库(实际上我是从备份中恢复的,但因为新系统的驱动器结构改变了,所以移到了另一个驱动器中),我收到了如下的错误信息:

fatal: Invalid path '<part_of_the_original_repo_path>': No such file or directory

我使用grep查找在我的.git/config文件中在[core]部分有一个worktree变量,它保存了我的git仓库的绝对路径。更改这个变量后,问题就得到了解决。


1
如果在调用 git status 时出现工作树错误,这个方法同样有效!谢谢! - joshua

10
虽然问题涉及到Git for Windows,但这似乎是在搜索Visual Studio Tools For Git时的首选结果(这是VS 2012扩展名,在VS 2013中具有本机支持)。
使用上述解决方案作为指南,我确定了Visual Studio Git工具使得将 repos(或甚至整个目录结构中的所有repos)本地移动非常容易。
1)关闭Visual Studio。 2)将Repo文件夹移动到新位置。 3)打开 Visual Studio。打开 Team Explorer。切换到“连接”视图(在顶部找到插头图标)。 3a)如果Repos仍然显示旧路径,请单击Refresh以强制更新。 4)已经本地移动的repos不再显示在“Local Git Repositories”中。 5)单击Add(不是New或Clone),然后选择要添加的repo文件夹。
在第5步中,您实际上只需提供一个搜索路径,搜索会自动包括所有子文件夹。如果您在单个根目录下组织了多个repos(独立的repos只有相同的父文件夹),则选择父级将包括所有在其下找到的repos。
例如: E:\ Repos \ RepoA E:\ Repos \ RepoB E:\ Repos \ RepoC
在Visual Studio Team Explorer [Add]>“E:\ Repos \”>[Add]将返回所有三个本地Repositories。

你的解决方案很有帮助,因为对我来说“点击添加...”这一步是必需的,谢谢。 - mdang

4
我使用Visual Studio Git插件,并且我有一些运行在IIS上的网站需要移动。一个适合我的简单方法是:

  1. 关闭Visual Studio。

  2. 移动代码(包括git文件夹等)

  3. 从新位置单击解决方案文件

这样可以刷新到新位置的映射,使用已经移动的现有本地git文件。一旦回到Visual Studio中,我的Team Explorer窗口就会显示在新位置的仓库。


4
我使用Windows版的Github桌面客户端,并想要移动存储库的位置。如果您移动目录并在软件中选择新位置,那么没有问题。但是,如果您设置了错误的目录,将会出现致命错误,并且没有第二次机会将其重新定位到正确的位置。因此,需要进行修复。您必须将项目文件复制到错误的目录中,并使Github桌面客户端识别它,之后,您可以再次将项目移动到另一个文件夹中,并在软件中进行重新定位。无需关闭Github桌面客户端,它将实时检查文件夹。希望这能帮助到某些人。

2
这对我没用。我将一个仓库从(例如)c:\project1\ 移动到 c:\repo\project1\,但Git for Windows没有显示任何更改。
git status 显示错误,因为其中一个子模块“不是一个git仓库”,并显示旧路径。例如(名称已更改以保护IP)
fatal: Not a git repository: C:/project1/.git/modules/subproject/subproject2 fatal: 'git status --porcelain' failed in submodule subproject
我必须手动编辑子模块中的.git文件,以指向子模块仓库的正确相对路径(在主仓库的.git/modules目录中)。

我不得不更新c:\project1\mysubmodule\.git文件,该文件包含子模块的绝对路径。 - Honza Vojtěch

2
如果您已经在新位置移动/修改了代码,但想继续使用相同的git仓库...
在Windows中,您只需将旧位置的隐藏.git文件夹复制并粘贴到新位置。
然后像往常一样使用git即可。

2

来自未来的报告:2018年4月。

我想要将我的Mac和Windows上的本地仓库标准化,它们已经分别存储在不同的本地文件夹中。

Windows 10客户端让我通过“找不到”>“定位”例程进行操作,虽然繁琐但并不可怕。同时,还需要在选项中更新本地的“克隆路径”以备将来使用。

当我合并了Mac文件夹时,Github客户端就自动重新找到它们了 - 我什么也没做!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接