4

我正在使用 git 来跟踪某些人更改并与其他人共享“只读”的内容。“读者”可能不时需要做出改变,但大多数情况下他们不会。

如果需要,我想允许 git“作者”重新设置推送的分支**,并确保“读者”永远不会意外合并。这通常很容易。

git pull origin +master

有一种情况似乎会引起问题。如果读者进行本地更改,上面的命令将合并。如果读者没有进行本地更改,我希望 pull 是全自动的,而如果他们进行了本地更改,它应该停止并要求输入。我想跟踪任何上游更改,同时注意合并下游更改。

在某种程度上,我真的不想拉。我想准确地跟踪主分支。


**(我知道这不是最佳实践,但在我们的案例中似乎是必要的:我们有一个包含大部分工作的主分支和一些针对特定客户的主题分支,需要隔离的微小更改。这似乎最简单经常变基以使主题保持最新。)

4

6 回答 6

7

您正在寻找命令git-fetch

于 2010-06-16T19:03:50.347 回答
5

您可能还会发现git pull --rebase有用。

更新: --rebase可以通过在各个分支上pull设置来使其成为默认行为。branch.<name>.rebase = true默认情况下,设置branch.autosetuprebase = true将在新分支上设置此设置,但需要手动更新现有分支。或者,您始终可以--rebase通过pull.rebase = true全局设置默认为。

于 2010-06-16T19:11:22.397 回答
2

怎么样:

  git pull --ff-only origin master

我经常这样用。不幸的是,正如richard-hansen@ 下面指出的那样,这不能用作别名:

[alias]
pull = pull --ff-only
于 2011-01-18T19:41:55.793 回答
0

Git 2.0(2014 年第二季度)将在提交 b814da8中添加一个配置push.ff

pull.ff::

默认情况下,Git 在合并作为当前提交的后代的提交时不会创建额外的合并提交。相反,当前分支的尖端是快进的。

  • 当设置为 false 时,这个变量告诉 Git 在这种情况下创建一个额外的合并提交(相当于从命令行给出 --no-ff 选项)。
  • 当设置为 only 时,只允许这样的快进合并(相当于--ff-only从命令行给出选项)。
于 2014-03-12T14:26:37.617 回答
0

由于您不希望阅读器获取手动合并,因此您可以编写一个挂钩来检查出现的内容并提示用户:

http://git-scm.com/docs/githooks

我仍然建议获取并让读者在本地管理他们的合并或变基。这是解决您的问题的更简单的方法。

于 2010-06-17T02:20:58.590 回答
0

我认为您想要一个使用两个分支的工作流程。合并的本地分支(主)和远程“只读”跟踪分支(远程)。

在主分支上使用双遥控器可以让您继续工作,并与远程项目保持同步。您的本地更改和合并的远程更改可以推送到您的本地 git 服务器。

 git push localserver master

上游补丁可以在您的远程跟踪分支上创建和完善,并提交给项目。

“只读”远程的单独跟踪分支可让您为远程项目的上游准备补丁和提交。

# Master branch is merge of local changes, and remote changes
git checkout master
git pull -m origin master
# Set up a local tracking branch for the 'read-only' remote.
git checkout -b remote remote master
# Start reviewing changes between the two branches.
git diff --name-status ..master

当您想要上游补丁时,可以使用来自 master..remote 的差异来定义您的只读远程分支的补丁。

git diff master..remote -- files >patch
git checkout remote
patch -p1 <patch
git commit -m "Your patch"
git format-patch -1

将格式化的补丁文件发送到远程项目。如果您需要为远程项目修改和变基,您可以在远程跟踪分支上完成这项工作,直到它获得批准。

(设置 git dual remote 涉及编辑 .git/config,并在别处解释)

于 2014-03-25T15:05:38.240 回答