我的Git存储库位于错误的根目录中。 我可以移动它吗? (../ 代替 。/)
不知怎么的,当我在一个月前git init
编辑了我的最新项目时,我在比我的项目根目录更高的目录中运行了这个命令。
所以我的仓库在./project
目录下,而不是./project/my-new-project
目录。 我不知道我以前怎么没有意识到这个问题,但直到现在我才从未查找.git目录。
有没有办法,不杀我的项目,将库移动到适当的目录,然后告诉git项目的新基地是什么? 只是移动目录不起作用。 Git认为所有的文件都被删除了。
也许最简单的事情,除非你已经创build了一些你想保存的历史logging,只要删除.git
子目录,然后在正确的目录中重新初始化即可。
如果你使用git来解决问题,任何解决scheme都会留下很多“移动这个文件在这里”的历史logging,但实际上并没有发生变化,但是你在创build时就修正了这个问题。 更好地创build它是正确的。
我有相反的问题 – 必须将git根移到父目录(从项目/ src到项目)我非常惊讶,以下工作!
src$ mv .git ../ src$ cd .. project$ git add src project$ git commit -a
git聪明地检测到所有的新文件都被重命名为旧版本,并且没有任何历史logging丢失
你可以尝试类似的东西…移动.git文件夹,并在提交之前再次添加文件
git filter-branch
让你以这种方式重写历史logging。 git filter-branch
手册页甚至有你的案例:
重写仓库看起来好像foodir /是它的项目根源,并放弃所有其他历史:
git filter-branch --subdirectory-filter foodir -- --all
您可能想要在git filter-branch
运行之前(或之后)将repo git clone
到新的子目录中。 (在过滤分支之前进行克隆,并在新克隆上运行filter分支将有一个好处,即将原始的.git/
dir保留在备用位置,以防发生错误。)
这为我工作,并保持我的历史完整。 从不正确的根文件夹(您意外初始化回购的父级):
移动文件夹:
mv .git thecorrectfolder/
重新初始化git仓库:
cd thecorrectfolder/ git init
重新添加所有文件,提交和推送:
git add . git commit -am 'fixing things' git push origin master
完成! 给自己一杯啤酒
当你重新初始化后提交git仓库时,你会得到一堆如下所示的输出:
rename {ethanode/coffee => coffee}/app.coffee (100%)
换句话说,所有来自父文件夹的引用被重命名为使用正确的文件夹。
Git可以记住他们的哈希文件,
只要将你的.git
移动到根目录下,并告诉git
使用--all
选项来记住所有的文件修改。
$ mv .git ../ $ cd .. $ git add . --all $ git status // => you can see all the files recognized as renamed 100% $ git commit -m "Moves repo to root directory."
使用git-mv
将文件“上移”到适当的位置,然后git-rm
“my-new-project”目录。
我来到这里寻找一种方法来移动我的资源库在任何地方 。
如果我不是唯一的一个,那么我最后做的是:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F我的“git克隆; – 镜像”达到我的回购裸露的副本,之后告诉它不再是裸露的,所以文件显示在那个新的文件夹中。 (然后检查是否有文件和日志出现。)保留一段时间的旧回购,以防万一…
这样我就能够移动我的回购而不会失去历史。
最好的问候,黛娜
刚刚经历了同样的问题,我最终的解决scheme是:
- 将.git文件夹移到需要的位置。
- 将目录更改为我刚才将.git移动到的文件夹
- 将文件夹内容重置为git认为它应该是:
git reset --hard HEAD
- 检查内容是否与kdiff3或其他比较工具匹配
- 在旧位置删除现在未版本化的文件。
它像魔术一样运作,对历史没有影响。 – 注意如果你做了一些修改,确保在移动.git目录之前提交它们。
有两种方法:
cd TheWrongDirectory rm -rf .git
只需删除.git文件夹,然后cd到正确的目录。