【问题标题】:how to rename/unite directories by git for all commits如何通过 git 为所有提交重命名/合并目录
【发布时间】:2013-07-24 08:52:08
【问题描述】:

让 Git repo 存在以下目录结构(它是从 SVN 转换而来的):

/
Release 1
  sub_dir1
    somefiles1
  sub-dir2
    somefiles2
Release 2
  sub_dir1
    somefiles1
  sub-dir2
    somefiles2
Release 3
  sub_dir1
    somefiles1
  sub-dir2
    somefiles2
...

SVN repo历史注释:

每年都有一些切割器机构采用最新版本并将其复制到同一回购中具有下一个编号的新版本。所以任何版本的子目录/文件结构几乎相同。但是每个版本都有不同的历史时期。


对于每个提交(漏洞回购) 如何: 1 将所有 ReleaseX 根重命名为一个名为“Release”的目录? 2 为所有版本的任何文件保留/统一提交历史记录?

结果 repo 必须如下所示:

/
Release
  sub_dir1
    somefiles1
  sub-dir2
    somefiles2

或者,我可以将每个 ReleaseX 从 svn 重新转换为单独的 repoX。对于每个 repoX,我需要将 ReleaseX 重命名为 Release。比我需要联合所有回购...... Ugrhh。但我认为这是一个耙子

【问题讨论】:

  • 你能改变文件夹的结构吗?你可以分别提交每个文件夹吗?
  • 为了什么?我需要导航项目,如 quastion 要求中所示。 Release下的文件夹结构是项目的结构,不能重构。分别提交文件夹在哪里?

标签: git git-filter-branch git-rewrite-history


【解决方案1】:

目前的方法似乎过于复杂。

值得咀嚼的东西:

您是否考虑过为每个版本创建单独的分支,而不是每次都创建一个新目录?一个快速的git checkout release-1 将带你到第 1 版源——类似于cd release-1/

--o---o---o---o---o---o---o---o---o---o---o---o--- o---o-Master/最新版本 | | | \--release-1 \--release-2 \--release-3

这使您可以git merge 任何您想要的分支。这种方法还可以减少你的 repo 大小(奖金!),这对于性能来说总是好的。

可能的灵感:http://nvie.com/posts/a-successful-git-branching-model/

这也使修补更容易。您可以对第 1 版进行修复,然后非常轻松地为其他版本生成补丁。

【讨论】:

  • 谢谢。我做了一个小脚本,它检查了从 svn 到 git 工作目录的每个提交,但总是将“ReleaseX”重命名为“Release”目录并将提交检查到 git。很容易。我还添加了对提交的作者和 cmets 的支持。任何已知的现有负责任的应用程序都无法提供这种带有目录名称的狗钉子的转换。
  • 将“ReleaseX”重命名为“Release”目录:确保引用目录名称或转义目录名称中的空格。例如,Release\ X"Release X"
猜你喜欢
  • 2020-08-19
  • 2014-06-29
  • 2014-01-07
  • 2012-02-03
  • 2012-05-21
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多