我正在重组一个现有项目。它们具有以下奇怪的结构。
src
-main
--app
---item
----src
-----Item.coffee
---other
----src
-----Other.coffee
我想移动 git 中的所有这些文件,因此 Item.coffee 等现在位于...
src
-main
--app
---item
----Item.coffee
---other
----Other.coffee
对于这个来说正确的 Bash/Git 命令是什么?
答案1
您要移动多少个文件?除非您要移动数十/数百/数千个文件,否则只需通过 GUI 或命令手动将文件物理移动mv
到新位置,Git 就会检测到该文件:
- 已从旧位置删除。
- 是新位置中的新文件。
因此,要添加新文件,只需git add *
在文件移动后在项目根目录下执行提交,然后 Git 将处理其余部分,包括注意到原来位于一个位置的文件现在位于另一个位置。
如果你是谈论数十/数百/数千个文件,那么您只需要在 Bash 中编写一些脚本来移动文件,然后执行相同的git add *
操作并提交过程,一切都应该很好。
像这样的 Bash 脚本应该可以将所有以*.coffee
扩展名结尾的项目移动到树中的上一个目录,无论其嵌套深度有多深:
find . -name '*.coffee' |\
while read item_path
do
item_dirname=$(dirname "${item_path}");
mv ${item_path} ${item_dirname}/..;
done
PS:你永远都不应该使用git rm
这样的程序。只需移动文件,使用git add *
添加新移动的文件,然后执行 Git 提交,一切就都好了。