仅为一个子目录创建分支

时间:2016-09-14 20:44:06

标签: git

这是一个概念性问题,而不是“我如何?”问题

我正在帮助将一个非常大的SVN存储库迁移到团队的Git存储库。 我简化了一点,但让我们假设它们当前的repo结构是这样的:

   --trunk
     |-Proj1
     |-Proj2
     |-Proj3
   --branch
     |-Proj1
       |- branch1

他们(回购的所有者团队)坚持认为,它应该转到一个Git存储库,而不是每个项目。让我们假设我无法说服他们。 (我怀疑他们会在他们开始使用Git并且明白这是不切实际的时候会到来。)

SVN中的每个ProjN都是独立于其他人的分支。

关于Git的问题,当我分支时,我可以分支一个repo的子文件夹(只是Proj1)而不是整个回购吗?我的直觉是你总是应该把git分到顶层。我错了吗?

2 个答案:

答案 0 :(得分:7)

您无法分支子文件夹。分支机构始终适用于整个工作区。

我想git submodules正是你在找什么。你可以把它们想象成“嵌套的git存储库”。

答案 1 :(得分:0)

好吧,您可以分支一个子文件夹。你是否应该是另外一个故事。

对于将子文件夹拆分为自己的 repo 的用例:

https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/

git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 

例如:

git checkout master
ls foosub/
git checkout -b foobranch
git filter-branch --prune-empty --subdirectory-filter foosub/ foobranch    

我不知道这是问题中所要解决的问题,但是由于我使用的搜索字词首先将我引到了这里,所以我想我也可以给出一个答案,即使用与我使用相似的搜索字词的人可能会在寻找。

我认为您甚至可以做一些花哨的事情来跟踪它……但这不是我的用例,它也可能不属于您(读者)。

奖金:合并到一个新的新仓库中

mkdir ./new-project
pushd ./new-project
git init
git pull ../original-project foobranch
#git remote add origin <new-project-url>
#git push