我必须从未合并的分支机构创建一些代码审查.
在寻找解决方案时,我们不要去本地分支上下文问题,因为这将在服务器上运行; 只有原点远程,我会在其他命令之前运行git fetch origin命令,当我们谈论分支时,我们将引用origin/branch-name.
如果设置很简单,并且每个源自master的分支继续以自己的方式继续,我们可以运行:
git rev-list origin/branch-name --not origin/master --no-merges
Run Code Online (Sandbox Code Playgroud)
对于每个未合并的分支,并将结果提交添加到每个分支的每个审阅.
当2-3个分支之间存在合并并且其中一些分支继续工作时会出现问题.正如我所说,对于每个分支,我想创建程序化的代码审查,我不想在多个评论中包含提交.
主要是每次提交找到原始分支时出现问题.
或者更简单一点......找到所有未创建的提交,这些提交按照他们最有可能创建的分支进行分组.
让我们关注一个简单的例子:
* b4 - branch2's head
* | a4 - branch1's head
| * b3
* | merge branch2 into branch1
* |\ | m3 - master's head
| * \| a3
| | |
| | * b2
| * | merge master into branch1
* /| | m2
|/ | * merge branch1 into …Run Code Online (Sandbox Code Playgroud) 我正在设置一个PHP标记的缓存实现,它将同时使用Redis和APCu.由于APC是键值存储,我将使用Redis进行密钥标记关系并与APC上的每个Web服务器同步.
我目前的问题只涉及Redis.可能你知道实现,但要明确:密钥可以有与之关联的标签.稍后您可以通过某些标记删除缓存的密钥.有许多键而不是很多标签,键和标签之间存在n对n的关系.
set(key, value, tags) 由组成:
SET key value
foreach tag in tags
SADD tag key
Run Code Online (Sandbox Code Playgroud)
因为在设置之后不需要检索或更改标签,所以我只需要保持标签到密钥的关系.
deleteByTag(tags) 是
keys = SUNION tag1 tag2 tag3...
DEL key1 key2 key2...
Run Code Online (Sandbox Code Playgroud)
为了加快速度,我创建了两个简单的lua脚本,我将脚本加载并调用EVALSHA.
Lua 设置脚本:
redis.call('set', KEYS[1], KEYS[2])
for _, tag in pairs(ARGV) do
redis.call('sadd', tag, KEYS[1])
end
Run Code Online (Sandbox Code Playgroud)
打电话给
EVALSHA setHash 2 key value tag1 tag2 tag3...
Run Code Online (Sandbox Code Playgroud)
我遇到问题的deleteByTag脚本如下所示:
redis.call('del', unpack(redis.call('sunion', unpack(ARGV))))
redis.call('del', unpack(ARGV))
Run Code Online (Sandbox Code Playgroud)
打电话给
EVALSHA deleteByTagHash 0 tag1 tag2 tag3...
Run Code Online (Sandbox Code Playgroud)
一切都很好,除非redis.call('sunion', unpack(ARGV))返回很多钥匙.似乎Lua对方法可以拥有的参数数量有一个硬性限制.在我的环境中它是8000.
我想知道是否有办法通过标签清除键,但避免:
这是(2)不够快的工作:
for _, …Run Code Online (Sandbox Code Playgroud)