新建 git 分支,仅包含部分文件的完整历史记录
make new git branch containing full history of only some files
我正在进行重构,最终会将 "the core model" 与我围绕它构建的 API 分开。
我有当前(简化的)目录结构:
/root
|-model_core.py
|-model_configuration.py
|-model_frontend.py
|-plot_model.py
|-cool_use_for_model.py
如何创建一个新分支 model-core
,其中包含 model_core.py
和 model_configuration.py
仅,以及它们的完整提交当前分支的历史记录?
我假设您希望从分支的历史记录中完全删除其他文件,而不仅仅是 git rm {model_frontend,plot_model,cool_use_for_model,}.py
提交。不过,如果这涵盖了您的需求,那么绝对只是这样做,而不是搞乱您的回购协议的历史记录。
公平警告:因为这涉及重写旧提交的文件,所以你的git历史将被重写,分支不会就提交的内容达成一致.这会使事情变得混乱。如果您不知道自己在做什么,不要这样做。
就是说,如果您创建分支 my-core-branch
来执行此操作,那么 git filter-branch --tree-filter 'rm -f model_frontend.py plot_model.py cool_use_for_model.py' my-core-branch
将重写 my-core-branch
中的历史记录以删除这些文件,但保留其他分支的历史记录.提交涉及这些文件以及您未删除的文件的哈希值将不再在分支之间匹配,显然,对于阅读本文的任何 git 新手, 使用风险自负。
你有几个选择:
http://blogs.atlassian.com/2014/04/tear-apart-repository-git-way/
https://lostechies.com/johnteague/2014/04/04/using-git-subtrees-to-split-a-repository/
主要的 2 个选项是:
git filter-branch
git subtree split --prefix=lib -b split
如上所述,让我们详细解释每个选项
filter-branch 将遍历每个提交,然后您可以只检出给定的文件,而 git subteree split
将是您的更好选择。
解释这两个选项,以便您可以选择您喜欢的一个。
示例代码:
filter-branch
# Filter the master branch to your directory and remove empty commits
git filter-branch --prune-empty --subdirectory-filter YOUR_FOLDER_NAME filter_from_branch
这会将您需要的所有文件从给定文件夹检出到当前目录
subtree split
git subtree
git-subtree
- Merge
subtrees together or split
repository into subtrees
git subtree split -P <name-of-folder> -b <name-of-new-branch>
我正在进行重构,最终会将 "the core model" 与我围绕它构建的 API 分开。
我有当前(简化的)目录结构:
/root
|-model_core.py
|-model_configuration.py
|-model_frontend.py
|-plot_model.py
|-cool_use_for_model.py
如何创建一个新分支 model-core
,其中包含 model_core.py
和 model_configuration.py
仅,以及它们的完整提交当前分支的历史记录?
我假设您希望从分支的历史记录中完全删除其他文件,而不仅仅是 git rm {model_frontend,plot_model,cool_use_for_model,}.py
提交。不过,如果这涵盖了您的需求,那么绝对只是这样做,而不是搞乱您的回购协议的历史记录。
公平警告:因为这涉及重写旧提交的文件,所以你的git历史将被重写,分支不会就提交的内容达成一致.这会使事情变得混乱。如果您不知道自己在做什么,不要这样做。
就是说,如果您创建分支 my-core-branch
来执行此操作,那么 git filter-branch --tree-filter 'rm -f model_frontend.py plot_model.py cool_use_for_model.py' my-core-branch
将重写 my-core-branch
中的历史记录以删除这些文件,但保留其他分支的历史记录.提交涉及这些文件以及您未删除的文件的哈希值将不再在分支之间匹配,显然,对于阅读本文的任何 git 新手, 使用风险自负。
你有几个选择:
http://blogs.atlassian.com/2014/04/tear-apart-repository-git-way/
https://lostechies.com/johnteague/2014/04/04/using-git-subtrees-to-split-a-repository/
主要的 2 个选项是:
git filter-branch
git subtree split --prefix=lib -b split
如上所述,让我们详细解释每个选项
filter-branch 将遍历每个提交,然后您可以只检出给定的文件,而 git subteree split
将是您的更好选择。
解释这两个选项,以便您可以选择您喜欢的一个。
示例代码:
filter-branch
# Filter the master branch to your directory and remove empty commits
git filter-branch --prune-empty --subdirectory-filter YOUR_FOLDER_NAME filter_from_branch
这会将您需要的所有文件从给定文件夹检出到当前目录
subtree split
git subtree
git-subtree
-Merge
subtrees together orsplit
repository into subtrees
git subtree split -P <name-of-folder> -b <name-of-new-branch>