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

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

我试过这些:

Git添加包含 Git mv common/ include/ 但是它会因为这个错误而失败 致命:坏源,源=myrepo/common,目的地=myrepo/include 我尝试了git mv common/ include/common,但我得到了相同的错误

你知道怎么做到吗?


当前回答

移动文件并使用git stage

你可以使用你最喜欢的工具(命令行,图形文件资源管理器)移动你的文件,git会发现你做了移动,而不是删除和创建,一旦你执行了你的操作,正如@Andres所建议的,但如果你做了太多的修改,Erik Kaplun指出,显式git mv可以帮助。

在某些应用程序中不使用Stage

一些GUI git工具(如GitHub Desktop)不提供对stage的直接访问:您可以选择和取消选择修改,但它不会修改底层git stage。你需要使用更强大的git工具,如命令行工具或正宗的git GUI来进行更改,然后GitHub Desktop也将显示操作为重命名。

其他回答

另一个重要的注意,我错过了,并立即修复了“坏源”错误:

我只是想分享我的错误,以防有人遇到。:))

当你运行命令时,确保在git控制台中选择了正确的路径:

- git mv Source Destination

如有需要,请使用:

- cd SourceFolder

然后是mv命令。

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

git mv oldFolderName newFoldername

Git错误失败

fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo

是否有任何未添加的文件,所以我才知道。

我有类似的问题,但在文件夹,我想移动我有文件,我没有跟踪。

假设我有文件

a/file1
a/untracked1
b/file2
b/untracked2

我想只移动跟踪文件到子文件夹subdir,所以目标是:

subdir/a/file1
subdir/a/untracked1
subdir/b/file2
subdir/b/untracked2

我所做的是:

I created new folder and moved all files that I was interested in moving: mkdir tmpdir && mv a b tmpdir checked out old files git checkout a b created new dir and moved clean folders (without untracked files) to new subdir: mkdir subdir && mv a b subdir added all files from subdir (so Git could add only tracked previously files - it was somekind of git add --update with directory change trick): git add subdir (normally this would add even untracked files - this would require creating .gitignore file) git status shows now only moved files moved rest of files from tmpdir to subdir: mv tmpdir/* subdir git status looks like we executed git mv :)

 git mv common include

应该工作。

从git mv手册页:

git mv [-f] [-n] [-k] <source> ... <destination directory>

在第二种形式中,最后一个参数必须是一个已存在的目录;给定的源代码将被移动到这个目录中。 索引在成功完成后更新,但仍然必须提交更改。

在移动之前不应该做“git添加”。


注意:“git mv A B/”,当B作为一个目录不存在时,应该出错,但是它没有。

参见Matthieu Moy (Moy)针对Git 1.9/2.0(2014年第一季度)编写的commit c57f628:

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

我通过这样做解决了这个问题:

电源外壳控制台 运行dir Alt-click并拖动文件/文件夹名称列,然后复制 粘贴到notepad++ 执行replace with regex: replace (.*) with git mv "。\ \ \ 1”。\ \ < New_Folder_Here > \” 从notepad++复制所有文本到powershell 回车