git命令将文件夹移到另一个文件夹中

lur*_*her 184 git

我创建了一个common包含大量源文件和文件夹的文件夹.

现在我想将common文件夹移动到文件include夹中,看起来像include/common

我试过这些:

  1. git add include

  2. git mv common/ include/

    但它失败了这个错误

    致命:糟糕的来源,来源= myrepo/common,destination = myrepo/include

  3. 我试过git mv common/include/common但是我得到了同样的错误

知道怎么做到这一点?

And*_*ack 171

关于git最好的一点是你不需要显式跟踪文件重命名.Git会通过比较文件的内容来弄明白.

所以,在你的情况下,不要这么努力:

$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common
Run Code Online (Sandbox Code Playgroud)

跑步git status应该显示这样的事情:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    common/file.txt -> include/common/file.txt
#
Run Code Online (Sandbox Code Playgroud)

  • 使用命令`git mv`是更好的方法. (60认同)
  • 这对我不起作用(使用Windows 7,1.7.6.msysgit.0).Git认为旧文件已删除,并添加了新文件. (34认同)
  • _"关于git的最好的事情之一"_ - 这个不错的功能的一个缺点是,当你修改重命名的文件时,它会开始失败,导致它看到一个删除和添加一个新文件,坦率地说,我更喜欢显式重命名支持. (21认同)
  • @OliverF.更正:`git mv`是等价的. (13认同)
  • @ErikAllik 只需在两个单独的提交中完成,问题就解决了 (3认同)
  • 如果 git 转换行尾,这会导致@Bart 描述的问题。为此,您必须执行以下操作: git config --global core.autocrlf false (2认同)

Von*_*onC 152

 git mv common include
Run Code Online (Sandbox Code Playgroud)

应该管用.

git mv手册页:

git mv [-f] [-n] [-k] <source> ... <destination directory>
Run Code Online (Sandbox Code Playgroud)

在第二种形式中,最后一个参数必须是现有目录; 给定的源将被移动到此目录中.
成功完成后会更新索引,但仍必须提交更改.

搬家git add应该做" " .


注意:" git mv A B/",当B不存在作为目录时,应该出错,但它没有.

提交c57f628马修莫伊(moy)GIT中1.9/2.0(Q1 2014):

Git用于修剪尾部斜杠,并使命令等效于' git mv file no-such-dir',它创建了文件no-such-dir(而尾部斜杠明确声明它只能是一个目录).

此修补程序跳过目标路径的尾部删除斜杠.
带有尾部斜杠的路径将传递给rename(2),该错误将显示相应的消息:

$ git mv file no-such-dir/
fatal: renaming 'file' failed: Not a directory
Run Code Online (Sandbox Code Playgroud)


小智 18

命令:

$ git mv oldFolderName newFolderName
Run Code Online (Sandbox Code Playgroud)

它通常工作正常.

错误"bad source ..."通常表示在上次提交后,源目录中存在一些重命名,因此git mv无法找到预期的文件.

解决方案很简单 - 只需在申请前提交git mv.


Kev*_*uck 12

确保在运行之前已将所有更改添加到暂存区域

git mv oldFolderName newFoldername
Run Code Online (Sandbox Code Playgroud)

git失败并出错

fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo
Run Code Online (Sandbox Code Playgroud)

如果有任何未添加的文件,那么我才发现.


Iva*_* F. 5

很抱歉,我没有足够的声誉来评论“Andres Jaan Tack”的“答案”。

我想我的消息将被删除((但我只想警告“lurscher”和其他遇到同样错误的人:小心做

$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common
Run Code Online (Sandbox Code Playgroud)

这可能会导致您不会在新文件夹中看到项目的 git 历史记录。

我试过了

$ git mv oldFolderName newFolderName
Run Code Online (Sandbox Code Playgroud)

得到了

fatal: bad source, source=oldFolderName/somepath/__init__.py, dest
ination=ESWProj_Base/ESWProj_DebugControlsMenu/somepath/__init__.py
Run Code Online (Sandbox Code Playgroud)

我做了

git rm -r oldFolderName
Run Code Online (Sandbox Code Playgroud)

git add newFolderName
Run Code Online (Sandbox Code Playgroud)

我在我的项目中没有看到旧的 git 历史。至少我的项目没有丢失。现在我在 newFolderName 中有我的项目,但没有历史记录(

只是想警告一下,如果你不想丢失你的 git hsiory,请小心使用“Andres Jaan Tack”的建议。