我创建了一个包含大量源文件和文件夹的文件夹。
现在我想将common文件夹移动到include文件夹中,这样它看起来就像include/common
我试过这些:
Git添加包含 Git mv common/ include/ 但是它会因为这个错误而失败 致命:坏源,源=myrepo/common,目的地=myrepo/include 我尝试了git mv common/ include/common,但我得到了相同的错误
你知道怎么做到吗?
我创建了一个包含大量源文件和文件夹的文件夹。
现在我想将common文件夹移动到include文件夹中,这样它看起来就像include/common
我试过这些:
Git添加包含 Git mv common/ include/ 但是它会因为这个错误而失败 致命:坏源,源=myrepo/common,目的地=myrepo/include 我尝试了git mv common/ include/common,但我得到了相同的错误
你知道怎么做到吗?
当前回答
另一种方法是将目录中的所有文件移动到子目录(保持git历史):
$(ls | grep -v 'subDir');做git mv $file subDir;完成;
其他回答
很抱歉,我没有足够的声誉来评论“Andres Jaan Tack”的“答案”。
我想我的留言会被删除 但我只是想警告“lurscher”和其他有同样错误的人:做的时候要小心
$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common
这可能会导致你在新文件夹中看不到项目的git历史。
如何提问
$ git mv oldFolderName newFolderName
got
fatal: bad source, source=oldFolderName/somepath/__init__.py, dest
ination=ESWProj_Base/ESWProj_DebugControlsMenu/somepath/__init__.py
我所做的
git rm -r oldFolderName
and
git add newFolderName
我没有看到旧的git历史在我的项目。至少我的项目没有丢失。现在我有我的项目在newFolderName,但没有历史(
只是想警告,小心使用“Andres Jaan Tack”的建议,如果你不想失去你的git历史。
我在git mv中遇到了类似的问题,我想将一个文件夹的内容移动到一个现有的文件夹中,并以这个“简单”脚本结束:
pushd common; for f in $(git ls-files); do newdir="../include/$(dirname $f)"; mkdir -p $newdir; git mv $f $newdir/$(basename "$f"); done; popd
解释
git ls-files:找到所有签入git的文件(在公共文件夹中) newdir = " . .美元/ include / $(目录名)”;mkdir -p $newdir;:在include文件夹中创建一个新文件夹,目录结构与普通目录相同 git mv $f $newdir/$(basename "$f"):将文件移动到新创建的文件夹中
这样做的原因是git在将文件移动到现有文件夹时似乎有问题,如果您试图将文件移动到不存在的文件夹(因此是mkdir -p),它也会失败。
这种方法的优点是它只触及已经签入git的文件。通过简单地使用git mv来移动整个文件夹,而文件夹中包含了未分阶段的更改,git将不知道该做什么。
在移动文件之后,您可能想要清理存储库以删除任何剩余的未分阶段更改-只要记住先运行!
git clean -fd -n
git最好的一点是您不需要显式地跟踪文件重命名。Git将通过比较文件的内容来找出它。
所以,在你的情况下,不要这么努力:参考:Git mv文档
$ mkdir include
$ git mv common include
$ git rm -r common
$ git add include/common
运行git状态应该显示如下内容:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: common/file.txt -> include/common/file.txt
#
另一个重要的注意,我错过了,并立即修复了“坏源”错误:
我只是想分享我的错误,以防有人遇到。:))
当你运行命令时,确保在git控制台中选择了正确的路径:
- git mv Source Destination
如有需要,请使用:
- cd SourceFolder
然后是mv命令。
我通过这样做解决了这个问题:
电源外壳控制台 运行dir Alt-click并拖动文件/文件夹名称列,然后复制 粘贴到notepad++ 执行replace with regex: replace (.*) with git mv "。\ \ \ 1”。\ \ < New_Folder_Here > \” 从notepad++复制所有文本到powershell 回车