【问题标题】:git move all content one level up, for all branchesgit 将所有内容上移一级,适用于所有分支
【发布时间】:2019-04-04 05:41:21
【问题描述】:

我想将 git 存储库中的所有内容上移一级,并且需要将其应用于我拥有的每个分支。从字面上看,我有:

+--repo
+----+.git
+----+folder
+--------+ A
+--------+ B

我只想:

+--repo
+----+.git
+----+A
+----+B

这个帖子How can I move all git content one-level up in the folder hierarchy?有一个很好的答案,建议这样做:

git mv folder/* ./ -k

现在我该如何处理所有分支?我能想到:

  • 对 master 执行 git mv,然后在 master 上执行 git rebase for all

  • 为所有分行使用git mv

其中一个比另一个有优势吗?我还看到了一些基于git filter-branch --index-filter(答案here)的答案,但不明白如何将其应用于我的案例。

谢谢!

【问题讨论】:

  • 您可以移动文件夹,然后添加这些更改吗?
  • 但是你会为每个分支都这样做,还是为一个然后变基?谢谢
  • 取决于提交树结构。在每个分支上执行此操作而不是依赖filter-branchrebase 可能最有意义。
  • 我总是将 .git 和文件夹放在同一级别,并且所有分支都基于该结构,所以看起来“一劳永逸”的操作是否有意义? 取决于树结构到底是什么意思?介意在帖子中详细说明吗?非常感谢!!
  • 你了解什么是提交树吗?

标签: git git-filter-branch


【解决方案1】:

我会使用new git filter-repo,其中does replace the old git filter-branch or BFG

自带many usage examples,包括基于路径的过滤,方便你将文件夹内容移到顶部(假设顶部目录只包含文件夹)

cd /path/to/second/clone
git filter-repo --path-rename folder/:

默认情况下,git filter-repo 适用于所有分支。

【讨论】:

  • 谢谢!所以是的,顶层目录只有.gitfolder,这是否仍然符合您的顶层目录只包含文件夹 的假设?对你指出的路径有点困惑,你不会在主克隆上做吗?还是只是先测试?再次感谢!
  • @Matifou 您可以在单独的本地克隆上对其进行测试。路径重命名为:“rename folder to /”(/是repo的根文件夹)。
猜你喜欢
  • 2013-08-07
  • 2015-04-26
  • 2011-10-31
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 2012-08-21
  • 2010-10-15
相关资源
最近更新 更多