- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以在工作中,我们正在实现一个新的,不错的git分支策略-太棒了!
为了保留存储库的新结构(而且很好),我们希望所有合并都使用--no-ff
标志(以及--no-commit
标志,以便更好地合并提交消息)。然而,仅仅要求每个人记住它,似乎有点不可靠。有没有办法强制每个开发人员都必须与上述标志合并?
据我所知,这是不可能用钩子检查的(因为git不可靠地存储任何关于快进的信息)。我知道可以在每台开发人员机器上设置配置(通过运行git config --global merge.ff no
)。如果这是解决方案,我如何确保每个开发人员都有这个配置集?
最佳答案
我相信您可以在服务器上的pre-receive hook中检查到这一点,但是很难定义什么是允许的,而且这可能会使推送对执行推送的人来说更加困难。而且,它只会给那些做错事的人一个错误:由他们来修复,这对一些用户来说可能有点复杂。
此外,您(和开发人员)可能不希望在某些合并上强制执行--no-ff
:特别是,如果您在branchX
上没有提交,并且获取了新的origin/X
提交,那么您可能希望将X
快速转发到origin/X
。(另一方面,在这种情况下,您/他们总是可以使用git rebase
。)
也就是说,让我们看看是否可以定义正确的行为。
首先,我们可能会注意到“快进”实际上是标签移动的属性,而不是合并的属性。当标签的前一个提交是其新提交的祖先时,标签会以快速前进的方式移动。(因此,git使用术语“快进合并”来指代事实上根本不是合并的内容。)git用于任何分支推送更新的默认测试是,除非设置了force标志,否则标签更新必须是快进操作。
我们不想拒绝标签快速转发,因为这是扩展分支的正常情况,无论是否合并:
...--o--o--n--n--n <-- br1
o
(更准确地说,
n
)用于指向尖端most
br1
,现在将指向尖端most
refs/heads/br1
。
o
元组的形式将每个引用更新请求交给您。换言之,考虑到上面的压缩
n
更新图,我们可以使用大写和小写(唉,我不能用颜色)重写它,大写代表传入的
<old-hash, new-hash, name>
和
br1
值,给出:
...--o--O--n--n--N <-- br1
old-hash
仍会指向commit
new-hash
。
br1
获取稍后将在
O
上的合并提交时,branch
br1
不会移动到直接包含该合并提交。也就是说,这没关系:
...--o--O--n--n--N <-- br1
... /
...---o--O--n--N <-- br2
br2
更新,然后我们会检查该部分;我们还不能这样做,因为我们还没有得到
br2
更新):
...--o--O--n--n--N <-- br1
... /
... n--n
... /
...----o--o <-- br2 (you get no update since br2 did not move)
...--o--O--n--n--N <-- br1, br2
... /
...---o--O--n--n
...--o--O--n--n--N <-- br1
... / \
...---o--O--n--n N <-- br2
br2
上限制允许它通过哪个父节点;在这些图中,指向左边的直线都是
br2
链接):
...--o--O--n--n--N <-- br1
... / \
...---o--O--n--n---N <-- br2
...--o--O--n--n--n--N <-- br1
... / \
...---o--O--n--n---N <-- br2
br2
上)。但是,我们必须检查每个合并,因为这不正常:
...--o--O--n--n--n--n--n---N <-- br1
... / \ \ /
...---o--O--n--n n--n--N <-- br2
--first-parent
时执行
br2
,然后在
git merge br2
时执行
br1
快速前进,然后在
git merge br1
上执行两次提交;他们也在
br2
上执行两次提交;然后他们再次将
br2
合并到
br1
中,然后将
br1
合并到
br2
中作为
br2
合并;然后在一个
br1
中同时推
--no-ff
和
br1
)。
br2
的规则,从而使这项工作变得更容易和更好。特别是,我们想要的是:
git push
是很有诱惑力的,但是这并不能正常工作,因为为合并显示的边界提交包括其所有父级,即使使用
--first-parent
。所以让我们直截了当地说:
# Operation must be a fast-forward. This ensures that
# $oldsha is an ancestor of (and thus related to) $newsha,
# and thus we are not discarding any commits.
if ! git merge-base --is-ancestor $oldsha $newsha; then
... reject as non-fast-forward
fi
edge=$(git rev-list --topo-order --first-parent $oldsha..$newsha | tail -1)
# If the rev-list is empty then $oldsha is not related to $newsha.
# However, we checked that first. (The only other case where this
# can occur is if $oldsha equals $newsha, which is not an update,
# so we won't be running this code at all.)
#
# The listed edge commit may, however, be a root commit (have
# no parent). We must reject this case as well as "parent is
# not $oldsha". Fortunately that happens automatically since
# the empty string does not match a valid hash; we just need
# to be sure to quote "$parent".
parent=$(git rev-parse -q --verify $edge^)
if [ "$parent" = $oldsha ]; then
... update is OK
else
... reject as containing a bogus merge
fi
--first-parent
不会返回到原始散列。
关于git - 强制整个团队 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36172424/
$ flutter ios build --release 它显示多个可用的有效开发证书(您的选择将被保存): 但是它没有显示分发证书选择,不过我使用了--release标志,,, 我检查过我已经在本
我有一个 Jenkins Bitbucket 团队/项目工作。 在我的存储库中的 Jenkinsfile 中,我使用“git describe”来获取当前标签。 在我更新到最新的 Jenkins 版本
您会在新的 .NET 开发团队中实现哪些最佳实践和方法? 干杯 最佳答案 仅使用 Visual Studio 如果您需要数据库,请使用服务器(尽早减少 SQL 问题) 使用版本控制 关于c# - .N
我有 3 个表用户、团队、组。每个团队可以有多个组。每个组中都有一个或多个用户。用户可以属于多个组。您认为对所有用户使用组会更好吗(这样每个团队至少有一个名为所有用户的组)还是引入另一个表 team_
问题: 让我们考虑以下场景: 让T={t_1, t_2, ..., t_h}成为一组不同的游戏。每场比赛都是一对一的(它们是单人游戏)。 设n为players的个数,每个游戏都有一个已知的性能度量这个
我们有 5 个人在从事同一个项目,并且在 Bitbucket 中有多个 GIT 存储库。每个用户都有自己的 Bitbucket 帐户。我正在寻找拥有某种团队或组织功能的最佳实践方法,以便我们都可以在相
我们在实现 Team Foundation Build Server 时遇到了性能问题,而且我对如何加快速度没有任何想法。我们已经添加了一些 PropertyGroup 元素来提高几个步骤(SkipC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我为我是所有者的团队 channel 设置了 Azure DevOps 连接器。它一直工作正常,但现在我需要调整一些设置,因为我不希望它宣布取消部署。因此,我打开连接器、已配置、AzureDevops
我们有一个团队机器人,可以在 MS 团队中发布消息。新对话的第一个事件总是一张自适应卡片,我们偶尔会用一张新卡片更新它。这一切正常,直到我用这个机器人组建了一个新团队。 我们正在尝试使用 Update
What do I need to install to activate this button Share Project in Eclipse?I need to transfer the pr
我创建了一个解决方案,其中包含我的所有项目,包括 Dotfuscator 项目和设置项目。 某些 Dotfuscator 项目仅对某些程序集进行了模糊处理,而不会影响它们的任何引用。 从 Visual
如何观察Variable来自一组团队 ( Variable ),以便每次 Game出现( Variable 由于游戏数组被修改而改变),数组 Team是否应该进行相应更新,例如比赛两支球队的得分、胜利
我的问题是我所有的应用程序 ID 都相同。我认为它们应该是不同的以识别它们。即使我尝试创建新的配置文件,它也不给我更改 ID 或生成新配置文件的选项。我正在尝试为我的一个应用程序设置 ICloud,我
熬夜工作到上午 1030 点并完成作业后,我决定在格式化并提交作业之前小睡一会儿。不用说,午睡变成了 5 小时的 sleep 时间。 醒来后,我将代码格式化为 java 的 eclipse googl
我是 3 个注册 iOS 开发团队的成员: 我的个人 iOS 开发者帐户。 我的企业 iOS 开发者客户团队。 我客户的 iOS 开发者客户团队。 我现在想使用 iOS Provisioning Po
目标:MS Teams 在双显示器上的可访问性行为,显示器设置为不同的比例,例如 100% 和 125%,分辨率为 1920*1080。我使用的工具是 Accessibility Insight。 问
最近注意到在 MS CRM 2011 中无法从工作流步骤创建/更新业务部门或团队。 为什么要制作它,是否有任何解决方法? 最佳答案 遗憾的是这是设计使然。您需要创建自定义工作流事件来创建/更新业务部门
你们这里有些奇怪。 我们有一个相当复杂的解决方案(在asp.net,silverlight,WFC,Ria Services等中分布了111个项目)解决方案,该解决方案可以在我的开发盒中正确构建(20
我们的技术总监希望测试运行后,能够在 Microsoft 团队 channel 中更新当前 testng 报告中的测试结果。 我们目前正在使用 testng 报告来分析测试运行后的报告。 我们可以将
我是一名优秀的程序员,十分优秀!