首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git提取https://<access-token>url-to-repo :git-分支不工作

git提取https://<access-token>url-to-repo :git-分支不工作
EN

Stack Overflow用户
提问于 2019-07-31 12:35:30
回答 1查看 4K关注 0票数 0

我有一个与主人和branch1的git回购。在分支1-我克隆在两个位置,我必须重置它到一个以前的提交在一个位置,然后强制将它推到远程,获取到另一个位置,并重置它。我必须在带有子进程的python脚本中这样做。因为我能够在location1中重置并强制推到远程,但是我无法使用https URL中的访问令牌在location2中获取它。如果我可以直接提供凭据,那么它可以正常工作,但不能使用访问令牌URL。

尝试:输出的git fetch https://<access-token>@repo-url :origin/branch1

  • 支行主管-> FETCH_HEAD

但是原产地/分支1没有到远程头所在的提交,因此我无法重置该特定提交。同时:

代码语言:javascript
复制
  git fetch
  prompt - username <entered>
  prompt - password <entered>

使原产地/分支1到我想要的提交位置,然后我能够重置到它。

我希望有某种方式运行git fetch命令(可以包括凭据或访问令牌),并在branch1上获取远程更改,以便我可以重置它。由于我是从python子进程运行的,所以无法为提示提供凭据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 16:17:11

git fetch https://<access-token>@repo-url :origin/branch1

git fetch的论点是:

  • 遥控器的名字。或者,如果你要固执,你可以在这里使用一个原始的URL,而不是一个遥控器的名字,这就是你所做的;
  • 任何数量的改装。您已经使用了一个refspec,特别是:origin/branch1

刷新规范有一种通用的src:dst,形式,其中src部件是在源存储库中找到的引用的名称(例如分支或标记名称),而dst是在您自己的存储库中找到的名称。(这可能是以强制标志+为前缀的。)在这种情况下,您省略了源,只提供了一个目标。由于您使用的是git fetch,所以另一个Git是源。因此,在这里,--您没有在源存储库中提供分支的名称--git fetch不会尝试猜测。

如果您希望使用它们的branch1作为您的origin/branch1的源,请提供正确的参考规范。使用完整的引用名称也是明智的:

代码语言:javascript
复制
git fetch <url> refs/heads/branch1:refs/remotes/origin/branch1

例如。

标准的fetch使用远程名称而不是URL,从remote.name.fetch设置中获得默认的refspec。对于名为origin的远程用户,通常如下所示:

代码语言:javascript
复制
+refs/heads/*:refs/remotes/origin/*

这样git fetch origin就可以获得它们的所有分支名称(refs/heads/*),并使用这些名称强制更新所有对应的远程跟踪名称(refs/remotes/origin/*,并适当地自动填充* )。如果提供原始URL而不是远程名称origin的原因是需要插入访问令牌,则可以这样做并提取remote.origin.fetch设置。例如:

代码语言:javascript
复制
p = subprocess.run(["git", "config", "--get-all", "remote.origin.fetch"],
    capture_output=True, text=True)
# for python 3.6 or earlier, use
#   stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True

p.check_returncode()
if p.stderr != "":
    ... do something here ...
refspecs = p.stdout.rstrip('\n').split('\n')

现在可以将refspecs (字符串列表)添加到git fetch参数中。

或者,如果您必须经常这样做,您可以只添加一个具有所需访问令牌的远程设备。请注意,您可以配置替代遥控器的fetch fetch来覆盖refs/remotes/origin/*,即使新的遥控器的名称不是origin。例如:

代码语言:javascript
复制
git remote add tokenized-origin <url-with-token>
git config remote.tokenized-origin.fetch '+refs/heads/*:refs/remotes/origin/*'

然后只是:

代码语言:javascript
复制
git fetch tokenized-origin

无论何时,您都可以使用带有URL的嵌入式令牌来进行更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57290884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档