我喜欢GitHub的名为Hub的工具,但不能与我公司的GitLab服务器一起使用。当我想检出合并请求分支进行审核时,GitLab的解决方案将提供以下说明:
第1步。获取并检出该合并请求的分支
git fetch ssh://gitlab.myserver.com:29418/username/repo.git branch_name git checkout -b username/branch_name FETCH_HEAD
哪种方法可以很好地检出分支,但在有要提取的更新时则无用(我必须删除分支,然后再次运行此命令。我真正想要的是拥有一个将其添加到我的命令中的命令。存储库的.git/config
如下:
[branch "branch_name"]
remote = ssh://gitlab.myserver.com:29418/username/repo.git
merge = refs/heads/branch_name
如果我手动输入,一切都会很好,当有更新时,我可以git pull
充实自己的内心,但是我无法弄清楚第一次输入的命令,以避免不得不返回并手动编辑我的.git/config
。
在您提出建议之前,是的,我知道我可以添加username/repo
远程服务器,但是我的团队中有很多人,我不想让他们的所有分支都弄乱我的本地仓库做类似的事情:
git fetch --all --prune
git log --graph --all --decorate --abbrev-commit --pretty=format:'%C(yellow)%h %Cred%cd %Cblue%an%C(auto)%d %Creset%s' --date=short
答案 0 :(得分:0)
最终,您的手动解决方案是添加两个配置值。您可以使用git config
命令执行此操作,而不是直接编辑文件。我意识到这并不完全是您的意思,但这可能是一种更容易编写脚本的方式来查看您的工作。 (特别是考虑到您可能只有一个远程URL;或者,如果没有,则很少,因此您可以根据需要为每个URL创建一个别名。)
查看此问题的另一种方法是,git支持在给定URL 上频繁访问存储库的方法是添加一个远程。您已拒绝此操作,因为它会将远程跟踪引用包含在log
的{{1}}参数(以及类似参数)的定义中;但是,您可以重新考虑使用什么参数。例如,如果您将gitlab添加为名为--all
的远程服务器,则可以
gitlab
或者您可能会发现git log --exclude=refs/remotes/gitlab/* --all
,--branches
,--tags
等的某种组合可能比首先使用--glob
更好地满足您的需求。
在不花费太多精力避免使用远程控制机制之前,我建议考虑这些选项。
答案 1 :(得分:0)
因此,我想出了一个解决方案,它利用了GitLab将PR的源分支镜像到merge-requests/<number/head
下的目标存储库中的事实。这不是我最喜欢的解决方案,因为过去我一直遇到镜像与原始分支长时间不同步的问题,但这只是我现在要解决的所有问题。
mr = "!f() { \
git fetch $1 merge-requests/$2/head:mr-$1-$2 && \
git checkout mr-$1-$2 && \
git config --add branch.mr-$1-$2.remote $1 && \
git config --add branch.mr-$1-$2.merge mr-$1-$2; \
}; \
f"
我仍然想听听其他解决方案,特别是如果它可以与原始源分支一起使用。