【问题标题】:More clever git filter-branch --subdirectory-filter更聪明的 git filter-branch --subdirectory-filter
【发布时间】:2013-03-29 15:38:42
【问题描述】:

我有一个相当大的项目,其背后有着悠久的历史,我正在尝试将某些文件放入他们自己的存储库中,同时保留他们的整个更改历史。
在此之前,我将所有需要保留在自己的project/subdirectory 中的文件移动了,所以我可以克隆我的存储库,使用git filter-branch --subdirectory-filter 但这会丢弃文件的整个历史,因为subdirectory 是很新。

我正在寻找一种方式来表达“保留所有导致这些文件的提交”,所以我会获取该子目录中的所有文件并向后走提交说“那个文件在这个提交中吗?是的将提交和文件保留在该提交中”。

有没有办法相对轻松地做到这一点?

【问题讨论】:

  • 这些文件过去是否移动/重命名过?

标签: git git-filter-branch


【解决方案1】:

也许您需要先修改原始存储库,以使这些文件的历史看起来像它们一直在该子目录中一样。
然后你可以应用 filter-beanch。

见“How can I rewrite history so that all files are in a subdirectory?”:

重写提交,以便project/subdirectory 不存在的任何地方,它被创建并将所有文件移动到它:

git filter-branch --prune-empty --tree-filter '
if [[ ! -e project/subdirectory ]]; then
    mkdir -p project/subdirectory
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files project/subdirectory
fi'

现在将记录历史记录,就好像所有文件始终位于project/subdirectory

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多