检出合并请求分支而不添加远程

时间:2019-04-01 15:56:14

标签: git gitlab

我喜欢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

2 个答案:

答案 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"

我仍然想听听其他解决方案,特别是如果它可以与原始源分支一起使用。