更改 Git 存储库目录位置。
Posted
技术标签:
【中文标题】更改 Git 存储库目录位置。【英文标题】:Change Git repository directory location. 【发布时间】:2012-07-08 06:05:41 【问题描述】:使用适用于 Windows 的 Git/Github,如果我有一个包含此目录的存储库:C:\dir1\dir2
,我需要做什么才能将 repo 文件移动到C:\dir1
?我显然可以物理复制和粘贴文件,但在 Git 端我需要做什么?
我在 GitHub 上有这个 repo,我使用 Git Bash 和 GitHub for Windows。
【问题讨论】:
Look at this answer,移动到另一个文件夹或另一台电脑也是如此。 【参考方案1】:只需复制整个工作目录内容(包括隐藏的.git
目录)。这会将整个工作目录移动到新目录,并且不会影响 GitHub 上的远程存储库。
如果您使用的是 GitHub for Windows,您可以使用上述方法移动存储库。但是,当您单击应用程序中的存储库时,它将无法找到它。要解决此问题,只需单击带有 ! 的蓝色圆圈,选择 Find It,然后浏览到新目录。
【讨论】:
但是 GitHub For Windows 是如何跟踪本地 repo 的呢?为此必须进行一些配置。 当我在 Windows 上执行此操作时,它迫使我创建一个新的存储库。 @Jleagle,自发布此答案以来,他们可能已经更改了它。如有必要,我会看看并更新我的答案。 它不应该要求你创建一个新的 repo:如果发生这种情况,你显然错过了一个 git 文件(可能是一个隐藏的文件)。发生在我身上,当我再次尝试时,我发现我错过了一些。 我在赢。在我手动将文件夹移动到新位置后,我重新打开了 Git GUI App 并在那里手动重新定位项目文件夹。这种方式对我有用。【参考方案2】:我不确定这个问题,所以这里有两个答案:
如果您想移动存储库:
只需复制整个存储库(及其.git
目录)。
.git
结构中没有绝对路径,也没有任何东西阻止它移动,因此移动后您无事可做。所有到 github 的链接(参见.git/config
)都将像以前一样工作。
如果您想在存储库中移动文件:
只需移动文件。然后添加git status
中列出的更改。下一个commit
将做必要的事情。您会很高兴得知不会复制任何文件:在 git 中移动文件几乎没有成本。
【讨论】:
但是 GitHub For Windows 是如何跟踪本地 repo 的呢?为此必须进行一些配置。 @user596075 它在.git
目录中。【参考方案3】:
如果您使用的是GitHub Desktop
,则只需执行以下步骤:
-
关闭
GitHub Desktop
和所有其他打开文件到当前目录路径的应用程序。
将上面提到的整个目录移动到新的目录位置。
打开 GitHub Desktop
并单击蓝色 (!)“未找到存储库”图标。然后将打开一个对话框,您将看到一个“定位...”按钮,该按钮将打开一个弹出窗口,让您将其路径指向新位置。
【讨论】:
【参考方案4】:虽然前面的答案似乎都说你可以只移动目录并且.git结构中没有绝对路径。使用 Cygwin 的 git 时,我发现这是不正确的。
当我移动我的 git 存储库时(事实上,我从备份中恢复了它,但由于我的驱动器结构在我的新系统上发生了变化,所以我将它恢复到了不同的驱动器)。我收到类似
的错误消息fatal: Invalid path '<part_of_the_original_repo_path>': No such file or directory
我使用 grep 发现在我的 .git/config 文件中的 [core] 部分是一个工作树变量,它保存了我的 git repo 的绝对路径。改变这个解决了我的问题。
【讨论】:
如果您在调用git status
时遇到工作树错误,这也可以!谢谢!【参考方案5】:
虽然问题涉及适用于 Windows 的 Git,但即使在搜索 Visual Studio Tools For Git(VS 2012 中的扩展,VS 2013 中的本机支持)时,这似乎也是最佳结果。
使用上述解决方案作为指导,我确定 Visual Studio Git 工具可以非常轻松地在本地移动存储库(甚至是所有存储库的整个目录结构)。
1) 关闭 Visual Studio。 2) 将 Repo 文件夹移动到新位置。 3) 打开视觉工作室。打开团队资源管理器。切换到“连接”视图(顶部的插头图标)。 3a) 如果 Repos 仍然显示旧路径,请单击 Refresh 以强制更新。 4) 已在本地移动的存储库不应再显示在“Local Git Repositories”中。 5) 点击Add(非新建或克隆)并选择要添加的repo文件夹。
在第 5 步中,您实际上只是提供了一个搜索路径,搜索会自动包含所有子文件夹。如果您在单个根目录下组织了多个存储库(独立存储库仅具有相同的父文件夹),则选择父级将包括在其下方找到的所有存储库。
示例: E:\回购\回购A E:\回购\回购B E:\Repos\RepoC
在 Visual Studio Team Explorer [Add] > "E:\Repos\" > [Add] 中会将所有三个返回到本地存储库。
【讨论】:
您的解决方案很有帮助,因为我需要“单击添加...”的步骤,谢谢。【参考方案6】:我使用 Visual Studio git 插件,并且我有一些在 IIS 上运行的网站我想移动。一种对我有用的简单方法:
关闭 Visual Studio。
移动代码(包括git文件夹等)
从新位置单击解决方案文件
这将使用已移动的现有本地 git 文件刷新到新位置的映射。回到 Visual Studio 后,我的团队资源管理器窗口会在新位置显示存储库。
【讨论】:
【参考方案7】:我使用适用于 Windows 的 Github Desktop,我想移动存储库的位置。如果您移动目录并在软件中选择新位置,则没问题。但是如果你设置了一个错误的目录,你会得到一个致命的错误,并且没有第二次机会重新定位到好的目录。所以要修复它。您必须将项目文件复制到坏目录中,然后通过Github Desktop对其进行重新定位,然后您可以再次将您的项目移动到另一个文件夹中并在软件中进行重新定位。无需关闭 Github Desktop,它会实时检查文件夹。
希望这会对某人有所帮助。
【讨论】:
【参考方案8】:这对我不起作用。我将一个 repo 从(例如)c:\project1\ 移动到 c:\repo\project1\ 并且 Git for windows 没有显示任何更改。
git status 显示错误,因为其中一个子模块“不是 git 存储库”并显示旧路径。例如(更改名称以保护 IP)
致命:不是 git 存储库:C:/project1/.git/modules/subproject/subproject2 致命:“git status --porcelain”在子模块子项目中失败
我必须手动编辑子模块中的 .git 文件以指向子模块存储库的正确相对路径(在主存储库的 .git/modules 目录中)
【讨论】:
我必须更新包含子模块绝对路径的c:\project1\mysubmodule\.git
文件。【参考方案9】:
未来报告:2018 年 4 月。
我想在我的 Mac 和 Windows 上标准化我的本地存储库,它们最终位于不同的本地文件夹中。
Windows 10 客户端让我经历了“找不到”>“定位”的例程,乏味但并不可怕。还需要更新Options中本地的“Clone path”以备日后使用。
当我合并 mac 文件夹时,Github 客户端又找到了它们——我什么都不用做!
【讨论】:
【参考方案10】:更基于 Git 的方法是使用 cd
对本地副本进行更改,或者复制和粘贴,然后将这些更改从本地存储库推送到远程存储库。
如果您尝试检查本地存储库的状态,它可能会显示“未跟踪的更改”,这实际上是重新定位的文件。要强制推送这些更改,您需要使用 暂存这些文件/目录
$ git add -A
#And commiting them
$ git commit -m "Relocating image demo files"
#And finally, push
$ git push -u local_repo -f HEAD:master
希望对你有帮助。
【讨论】:
【参考方案11】:-首先检查当前文件夹中包含git repo的所有目录 $ ls -la 或 ls -al
-识别这个文件夹
**.git**
-使用此命令将文件夹移动到您需要的位置,
$ mv .git 你想要的目录
注意:>该目录不会影响 git 历史,也不会影响远程连接 >考虑要移动到的目录的树(路径)
【讨论】:
【参考方案12】:如果您使用 Visual Studio,请使用 Teams Explorer > Connect 选项卡 > Local Git Repositories 中的 Add 将现有本地存储库添加到可用存储库中。不用大惊小怪,不用麻烦。
【讨论】:
【参考方案13】:将本地存储库链接到不同的远程存储库
1- 删除与远程存储库的所有连接: 项目文件夹内:
git rm .git
(从本地存储库中删除所有数据)
git status
(我必须说它没有链接到任何)
2- 链接到新的远程存储库
git init
启动本地仓库
git remote add origin urlrepository.git
链接远程仓库
git remote -v
确认链接到远程仓库
3- 将更改添加到本地存储库并推送
git pull
或 git pull origin master --allow-unrelated-histories
如果本地和远程仓库中的 git 历史记录不同。
git add.
git commit -m" Message "
git push -u origin master
【讨论】:
【参考方案14】:如果您已经在新目的地中移动/修改了代码,但想继续使用相同的 git 存储库...
在 Windows 中,您只需将隐藏的 .git
文件夹从旧位置复制粘贴到新位置即可。
然后像往常一样使用 git。
【讨论】:
以上是关于更改 Git 存储库目录位置。的主要内容,如果未能解决你的问题,请参考以下文章
git 工作目录 vs 暂存区 vs 本地仓库 vs .git 文件夹