Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Git存储库位于错误的根目录中。我可以移动它吗?(../而不是./)_Git - Fatal编程技术网

我的Git存储库位于错误的根目录中。我可以移动它吗?(../而不是./)

我的Git存储库位于错误的根目录中。我可以移动它吗?(../而不是./),git,Git,大约一个月前,当我gitinit编辑我的最新项目时,我在比项目根目录高一个目录的目录中运行了该命令 因此,我的存储库位于/project目录中,而不是/project/mynewproject目录中。我不知道我是如何在早些时候没有意识到这个问题的,但直到现在我才找到.git目录 有没有一种方法可以在不终止我的项目的情况下,将存储库移动到适当的目录,然后告诉git项目的新基础是什么?只是移动目录不起作用。Git认为所有文件都已删除。使用Git mv将文件“向上”移动到正确的位置,然后Git rm到

大约一个月前,当我
gitinit
编辑我的最新项目时,我在比项目根目录高一个目录的目录中运行了该命令

因此,我的存储库位于
/project
目录中,而不是
/project/mynewproject
目录中。我不知道我是如何在早些时候没有意识到这个问题的,但直到现在我才找到.git目录


有没有一种方法可以在不终止我的项目的情况下,将存储库移动到适当的目录,然后告诉git项目的新基础是什么?只是移动目录不起作用。Git认为所有文件都已删除。

使用
Git mv
将文件“向上”移动到正确的位置,然后
Git rm
到“我的新项目”目录。

可能是最简单的事情,除非您已经创建了一些要保存的历史记录,只需删除
.git
子目录,并在正确的目录中重做init


如果您使用git来解决这个问题,任何解决方案都必然会留下大量“movedthisfilehere”历史记录条目,这些条目实际上并没有发生更改,但您在创建时修复了一个错误。最好直接创建它。

git filter branch
允许您以这种方式重写历史。甚至还有你的情况:

要重写存储库,使其看起来像foodir/是它的项目根, 并放弃所有其他历史记录:

git filter-branch --subdirectory-filter foodir -- --all

您可能希望在运行
git过滤器分支之前(或之后?)将repo克隆到一个新的子目录中。(在筛选器分支之前进行克隆并在新克隆上运行筛选器分支的好处是保留原始的
.git/
目录作为备份,以防出现问题。)

我遇到了相反的问题-必须将git根目录移到父目录(从project/src移到project) 令我极为惊讶的是,以下方法奏效了

src$ mv .git ../ 
src$ cd ..
project$ git add src
project$ git commit -a
git巧妙地检测到所有新文件都被重命名为旧文件的版本,并且没有丢失任何历史记录


你可以试试类似的。。。在提交之前,移动.git文件夹并再次添加文件

我来这里是想找到一种将我的存储库移动到任何地方的方法

在这种情况下,我不是唯一的一个,以下是我最后所做的:

我“git clone--mirror”创建了一个我的repo的裸体副本,然后告诉它不要再裸体了,所以文件显示在新文件夹中。(然后检查是否出现了文件和日志。)保留旧回购协议一段时间,以防万一

这样我就可以在不丢失历史的情况下转移回购协议

致以最良好的祝愿,
黛娜

这对我来说很有效,并且保存了我所有的历史。从错误的根文件夹(意外初始化repo的父文件夹)中:

移动文件夹:

mv .git thecorrectfolder/
重新初始化git回购:

cd thecorrectfolder/
git init
重新添加所有文件、提交和推送:

git add .
git commit -am 'fixing things'
git push origin master
完成了!给自己拿杯啤酒

当您在重新初始化后提交git repo时,您将得到一系列输出,如下所示:

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文件夹移动到需要的位置
  • 将目录更改为我刚将.git移动到的文件夹
  • 将文件夹内容重置为git认为应该的内容:
    git Reset--hard HEAD
  • 使用kdiff3或其他比较工具检查内容是否匹配
  • 在旧位置删除现在未版本化的文件

  • 它像魔术一样发挥作用,对历史没有任何影响N.B.如果您做了一些更改,请确保在移动.git目录之前提交这些更改。

    这里有两种方法:

  • cd目录rm-rf.git

  • 只需将.git文件夹和cd删除到正确的目录


  • 反过来说。我不想把我所有的文件移到git所在的目录下(那里有很多其他东西…这会很烦人),然后把git移到上面。我想将存储库上移到我的项目的根目录中。我知道你在说什么,但是你在git中为纠正这一点所做的任何操作最终都会留下一堆“movedthisfilehere”的历史记录,这些历史记录实际上并没有改变,但你在创建时修复了一个错误。最好是把它做好。这会破坏很多东西。是一个更好的方法。好吧,保存一些历史是Git的用途。也许我们应该删除.git子目录并从系统中卸载git?毕竟,使用ftp服务器而不是vcs可能是最简单的事情!下面的答案是一个更好的方法,因为它保留了所有的历史。所以对我来说,我这样做了,并立即意识到我的错误。不用担心任何变化,这是重新开始的最简单方法。这对我来说非常有效。我还从目录中移动了其他的.git*配置文件,比如.gitigremy亲爱的先生,你是一个救世主。这东西真的有用。谢谢。此外,我
    git rm'd
    从文件的旧位置删除了这些文件,因此
    git status
    (正确)最终报告了许多重命名操作。我越是使用git,我就越喜欢它。@Mike这应该被标记为已接受的答案。这是重新初始化的首选解决方案,因为您不会丢失历史记录。如果你不相信我的话,投票数的上升说明了一切。谢谢!这对我很管用,但我还得做几件事:1。在提交之前,我更新了
    .gitignore
    ,并在根文件夹中运行了
    git add-A
    ;在此之后,git将正确显示