我与一个使用git进行源代码管理的小团队合作.最近,我们一直在做主题分支以跟踪功能,然后将它们合并到本地主服务器,然后将它们推送到远程服务器上的中央git存储库.当master中没有进行任何更改时,这很有用:我创建我的主题分支,提交它,将其合并到master中,然后推送.万岁.
但是,如果有人在我之前推送到原点,我的提交并不是快进的.因此,合并提交随之而来.当主题分支需要在本地与master合并以确保我的更改与现在的代码一起使用时,也会发生这种情况.因此,我们最终到处都是合并提交,以及与友谊手镯相媲美的git日志.
因此,变基是显而易见的选择.我想要的是:
我目前的做法如下:
git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?
我有一个git存储库,需要以sudo的形式运行post-receive hook.我编译为测试它的二进制文件如下所示:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int ret;
ret = setuid(geteuid());
if(!ret) {
fprintf(stderr, "error setting uid %d \n", ret);
}
system("[...command only sudo can access...]");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该geteuid()检索的所有者ID post-receive,然后试图对setuid.当与任何用户(包括超级用户)一起运行时,它以root身份正确运行脚本.但是,当由git hook触发时,系统无法设置uid.我试过运行chmod u+s post-receive 我也尝试了一些其他配置,但我的想法已经用完了.除非git触发它,否则它会在所有情况下都有效?
顺便说一句,平台Ubuntu Server 9.04(2.6.28-15),git1.6.0.4,gcc版本4.3.3(Ubuntu 4.3.3-5ubuntu4)