如何使用 git 和 bash 以递归方式将名为“n”的文件夹中的所有文件移动到上一个目录

如何使用 git 和 bash 以递归方式将名为“n”的文件夹中的所有文件移动到上一个目录

我正在重组一个现有项目。它们具有以下奇怪的结构。

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 就会检测到该文件:

  1. 已从旧位置删除。
  2. 是新位置中的新文件。

因此,要添加新文件,只需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 提交,一切就都好了。

相关内容