git - 从多个 pull ,仅 push 一个

标签 git

这是我想要的工作流程:

Git Workflow

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

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

我怎样才能实现这个目标?

我添加了两个存储库,但它总是进行 merge (因为我使用git pull),但如果我只使用git远程更新,我的文件不会更改。

我采取的设置步骤:

远程:

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/*

最佳答案

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

更常见的模式是使用分支将框架和客户端分开。这也意味着您只需要两个存储库:共享裸存储库和本地开发存储库。您可以从origin pull ,它有两个主要分支:frameworkclient。您可以选择将哪些内容从 framework merge 到 client,并且您(几乎)永远不会从 client merge 回 framework.

关于git - 从多个 pull ,仅 push 一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213780/

相关文章:

git - Visual Studio 2017 - 无法将提交的更改推送到本地存储库

git - 防止在 Git 中 checkout

git - 接收端不支持推送选项

git-receive-pack 使用双引号,但不使用单引号,而 git 使用单引号调用它

git - 不清楚 git Push 如何影响远程分支

git - 无法使用 Windows 使用 ssh key 访问 gitlab 存储库

git - 忽略git中的子目录的问题

git - 删除精选的提交

git - 将一个 Subversion 存储库项目拆分为两个 Git 存储库

git - 恢复一个 git rebase 补丁