eck*_*kes 6 git layout repository
我遇到以下问题但没有答案:
我们有一个从SVN回购克隆的回购.存储在该repo中的项目类似于各种项目使用的平台软件.回购的结构如下:
platform
|- core
|- additional
Run Code Online (Sandbox Code Playgroud)
由于某些原因,该回购的结构无法更改.这两个,core并additional含有对的那部分数据platform.
如果项目想要使用该平台并添加一些功能,它会在additional包含源的情况下创建一个新文件夹,并为该功能添加一个标头additional/includes
目前,我们只是从新的项目分支出来master,一切都进入同一个回购.这会导致分支机构膨胀,我的(中央)仓库越来越多,因为在单个项目中提交的所有提交都会转到中央仓库(我的同事已经习惯了SVN,因此它们push几乎在每个项目之后commit- 只是为了当然...).
首先我想到的是子模块:保存platform为超级项目(被调用super)下的子模块,然后转到super/platform/additional/mystuff,在那里创建源并将它们添加到super.但这显然不起作用,因为文件在platform子模块内.
有没有更好的方法来组织我的回购,所以:
platform platform不要搞乱回购platform?编辑1:高度耦合的git子模块涵盖了我所处的相当多的场景:紧密耦合的东西,我唯一一个比git的绝对基础知识更多的人,"大多数开发人员只有粗略的git知识".完美的一对!
编辑2:虽然迈克尔的答案看起来很有希望,但我认为使用起来有点过于复杂.我正在寻找一些不需要太多交互的非常简单的事情.
我发现你的使用master有点令人困惑,因为我从来不知道你是指整个平台存储库还是它的主分支.
我对此的解决方案如下:
这是只有平台代码才能进入的地方.使用例如您现有的仓库作为起点.
这是平台存储库的克隆,并保留项目的所有代码.用它开始吧
$ git clone --bare /path/to/platform
Run Code Online (Sandbox Code Playgroud)
作为开发人员,您首先要克隆项目存储库.
$ git clone /path/to/project
Run Code Online (Sandbox Code Playgroud)
现在,进行更改,提交它们并将它们推送到项目中.
$ editor some-file
$ git add -p some-file
$ git commit
$ git push
Run Code Online (Sandbox Code Playgroud)
通过使用将其他开发人员所做的更改提取到项目中git pull.
由于您还想对平台本身进行更改,因此您还需要一种方法来访问平台存储库.因此,您将其作为远程仓库添加到您的本地仓库:
$ git remote add platform /path/to/platform
$ git fetch platform
Run Code Online (Sandbox Code Playgroud)
正如您现在所看到的git branch -a,您的本地仓库了解平台.现在您想对平台进行一些更改.首先,您创建一个本地分支中心,它是平台仓库主分支的克隆:
$ git checkout -b central platform/master
Run Code Online (Sandbox Code Playgroud)
您可以随时使用git branch
或检查您所在的分支git status.现在你进行更改并提交它们(到中心,你的位置).由于中央连接到
平台/主站(结账cat .git/config),您只需使用即可将更改推送到平台仓库git push.也
git pull可以没有任何其他参数.
使用git checkout master和git checkout central更改分支机构.
注意: 您需要完成上一节中的工作.
首先更改您的平台分支并引入新版本的平台:
$ git checkout central
$ git pull
Run Code Online (Sandbox Code Playgroud)
现在返回到项目分支,并将平台中所做的更改合并到项目分支中.
$ git checkout master
$ git merge central
Run Code Online (Sandbox Code Playgroud)
如果发生冲突,会发生类似这样的事情:
$ git merge central
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
打开包含冲突的文件,解决它们,将它们添加到临时区域并提交合并:
$ editor index.html
$ git add index.html
$ git commit
Run Code Online (Sandbox Code Playgroud)
现在将您的更改推送到项目的裸仓:
$ git push
Run Code Online (Sandbox Code Playgroud)
有关合并冲突的更多信息:Pro Git:基本合并冲突
如果您不想更改平台repo,而是将更改从那里合并到您的项目中
$ git remote add platform /path/to/platform
$ git fetch platform
$ git merge platform/master
Run Code Online (Sandbox Code Playgroud)
该git remote add只需要在你第一次合并.其他两个总是需要的.
关于合并的部分基于Pro Git Book,该书由cc-by-sa许可.此帖子的所有其他内容可能被视为公共领域.