有两个回购:小和大。
SMALL是独立于BIG创建的,但它们都具有完全相同的目录结构和文件(只是内容不同)。
BIG基本上是由类似的SMALL组成的(想想子模块 - 我只需要编辑一个特定的目录,不能在整个仓库上工作)
BIG的目录结构:
应用/
...文件夹一 ...文件夹二 库/
一堆项目特定的文件
小:
应用/
...文件夹三 库/
一堆项目特定的文件
在apps/
内,每个文件夹对应一个子模块。我的SMALL repo具有完全相同的目录结构,但我不想合并所有内容。只有apps/
中的文件夹三。 有可能吗?
问题是,当项目在我的工作场所分配给我时,我们还没有确定将SMALL集成在哪里(有两个BIG候选人)。这就是我暂时创建个人仓库的原因。
现在是集成的时候了,我不想简单地将我的文件夹复制粘贴到BIG仓库中。我宁愿保留我的提交历史记录,但只将 相关的文件夹/文件推送到BIG仓库。
git pull BIG --allow-unrelated-histories
进入SMALL回购,但删除了三个文件夹(我想要的那个)答案 0 :(得分:0)
您可以在不提交的情况下合并,然后在完成合并之前清理您不想要的路径。
git merge --no-commit --allow-unrelated-histories SMALL/master
git reset -- . ':!apps/folder-three/*'
git checkout -- . ':!apps/folder-three/*'
git clean -df
git add .
git commit
按顺序:
.
的所有文件夹,然后排除:!<pathspec>
的一个路径。请参阅pathspec -d
包含目录-f
强制删除。文件夹三中的分阶段文件不会受此影响。这个过滤器分支的唯一优势(否则会更干净),就是你可以避免重写历史。
如果您在提交前犯了错误,可以git merge --abort
。如果合并后你不喜欢结果,你可以git reset --hard HEAD~1
回到合并前的状态。