从多个拉,只推到一个

时间:2014-08-08 23:43:01

标签: git

这是我的目标工作流程:

Git Workflow

我有两个存储库。一个用于以PHP编码的网站框架,另一个用于自定义PHP代码,用于添加客户端所需的网站功能。

我需要能够从客户端网站的两个存储库中提取,但只能推送到一个,这将是自定义代码,我只希望第二个存储库保存自定义代码,而不是框架。

我怎样才能做到这一点?

我添加了两个存储库但它总是进行合并(因为我使用git pull)但如果我只使用git remote update我的文件不会更改。

我为设置采取的步骤:

远程:

mkdir ~/git/framework.git
cd ~/git/framework.git
git init --bare

mkdir ~/git/client1.git
cd ~/git/client1.git
git init --bare

本地:

mkdir ~/www/framework
cd ~/www/framework
git init
git remote add framework ssh://user@host/~/git/framework.git

mkdir ~/www/client1
cd ~/www/client1
git init
git remote add framework ssh://user@host/~/git/framework.git
git remote add client ssh://user@host/~/git/client1.git

这是我的本地客户端配置:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "framework"]
    url = ssh://user@host/~/git/framework.git
    fetch = +refs/heads/*:refs/remotes/framework/*
[remote "client"]
    url = ssh://user@host/~/git/client1.git
    fetch = +refs/heads/*:refs/remotes/client/*

1 个答案:

答案 0 :(得分:2)

对于您的模式,您可以按this answer (several suggestions)声明其中一个存储库为只读。然后,您可以使用git pull clientgit pull framework进行同步,并使用git push client来推送您的代码。要将client设置为默认远程,您可以执行git branch --set-upstream-to client/master(或者使用默认情况下要推送到的任何远程分支替换master)。

更常见的模式是使用分支来保持框架和客户端分离。这也意味着您只需要两个存储库:共享裸存储库和本地开发存储库。您可以从origin拉出,其中包含两个主要分支frameworkclient。您可以选择从framework合并到client的内容,并且(几乎)永远不会从client合并回framework