git命令来移动另一个文件夹
我已经创build了一大堆源文件和文件夹的common文件夹。 
 现在我想将common文件夹移动到include文件夹中,使其看起来像include/common 
我试过这些:
- 
git add include
- 
git mv common/ include/但是这个错误会失败 致命的:坏源,源= myrepo / common,destination = myrepo / include 
- 
我试过git mv common / include / common,但是我得到了同样的错误 
任何想法如何实现这一目标?
git最好的事情之一是你不需要明确地跟踪文件重命名。 Git会通过比较文件的内容来计算出来。
所以,在你的情况下,不要那么辛苦:
 $ mkdir include $ mv common include $ git rm -r common $ git add include/common 
 运行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 # 
  git mv common include 
应该pipe用。
 从git mv手册页 : 
 git mv [-f] [-n] [-k] <source> ... <destination directory> 
在第二种forms中,最后一个参数必须是现有目录; 给定的源将被移动到这个目录中 。
成功完成后更新索引,但仍必须提交更改。
 移动之前不应该做“ git add ”。 
 注意:“ git mv AB/ ”,当B不存在作为一个目录时,应该出错,但它没有。 
 参见Matthieu Moy( moy )为Git 1.9 / 2.0 (2014年第1季度) 提交的c57f628 : 
Git用来修剪尾部的斜杠,并使命令等效于'
git mv file no-such-dir',它创build了no-such-dir文件(而后面的斜杠明确指出它只能是一个目录)。此修补程序跳过目标path的尾部斜杠删除。
具有结尾斜杠的path被传递给重命名(2),这些错误与适当的消息一起:
 $ git mv file no-such-dir/ fatal: renaming 'file' failed: Not a directory 
命令:
 $ git mv oldFolderName newFolderName 
它通常工作正常。
 错误“不良来源…”通常表示在上次提交后,在源目录中有一些重命名,因此git mv找不到预期的文件。 
 解决方法很简单 – 只是在应用git mv之前提交。 
确保在运行之前将所有更改添加到临时区域
 git mv oldFolderName newFoldername 
git失败,错误
 fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo 
如果有任何未添加的文件,所以我只是发现了。
将目录中的所有文件移动到子目录(保持git历史logging)的另一种方法:
 $ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done; 
 我有一个与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:find所有的文件(在common文件夹中)签入git
-  newdir="../include/$(dirname $f)"; mkdir -p $newdir;:在include文件夹内创build一个新文件夹,其目录结构与common目录结构common
-   git mv $f $newdir/$(basename "$f"):将文件移动到新创build的文件夹中
 这样做的原因是,git似乎有问题移动文件到现有的文件夹,并且如果您尝试将文件移动到不存在的文件夹(因此mkdir -p )也会失败。 
 这种方法的好处是, 它只接触已经签入到git的文件。 通过简单地使用git mv移动整个文件夹,并且该文件夹包含未分离的更改,git将不知道该怎么做。 
在移动文件之后,您可能需要清理存储库以删除任何尚未分配的更改 – 请记住首先干运行!
 git clean -fd -n 
对不起,我没有足够的声望来评论“安德烈·贾恩·塔克”的“答案”。
我想我的信使会被删除((但是我只是想警告“lurscher”和其他人有同样的错误:要小心
 $ mkdir include $ mv common include $ git rm -r common $ git add include/common 
这可能会导致您不会在新文件夹中看到项目的git历史logging。
我尝试了
 $ git mv oldFolderName newFolderName 
得到
 fatal: bad source, source=oldFolderName/somepath/__init__.py, dest ination=ESWProj_Base/ESWProj_DebugControlsMenu/somepath/__init__.py 
我做了
 git rm -r oldFolderName 
和
 git add newFolderName 
我的项目中没有看到旧的git历史。 至less我的项目不会丢失。 现在我有我的项目newFolderName,但没有历史(
只是要警告,如果你不想失去你的git hsitory,请小心使用“Andres Jaan Tack”的build议。
我有类似的问题,但在我想要移动的文件夹中,我有我没有跟踪的文件。
假设我有文件
 a/file1 a/untracked1 b/file2 b/untracked2 
 我只想把跟踪文件移动到子文件subdir ,所以目标是: 
 subdir/a/file1 subdir/a/untracked1 subdir/b/file2 subdir/b/untracked2 
我所做的是:
-  我创build了新文件夹,并移动了我感兴趣的所有文件: mkdir tmpdir && mv ab tmpdir
-  签出旧文件git checkout ab
-  创build新的目录,并将干净的文件夹(没有未跟踪的文件)移动到新的子目录: mkdir subdir && mv ab subdir
-  添加所有文件从子目录(所以Git可以添加只跟踪以前的文件 – 这是一些git add --update– 更新与目录更改技巧 ):git add subdir(通常这会添加甚至未跟踪的文件 – 这将需要创build.gitignore文件)
-   git status现在只显示移动的文件
-  将其余的文件从tmpdir移到subdir: mv tmpdir/* subdir
-   git status看起来像我们执行git mv🙂