git 获取 https://<access-token>url-to-repo :git-branch 不工作
git fetch https://<access-token>url-to-repo :git-branch not working
我有一个包含 master 和 branch1 的 git 仓库。
在 branch1- 我在两个位置克隆,我必须将它重置为一个位置的前一个提交,然后强制将其推送到远程并将其提取到另一个位置并重置它。我必须在一些带有子进程的 python 脚本中完成。因为我能够在 location1 中重置并强制推送到远程,但我无法使用 https URL 中的访问令牌在 location2 中获取它。如果我可以直接提供凭据,它可以正常工作,但不能使用访问令牌 URL.
尝试过:git fetch https://<access-token>@repo-url :origin/branch1
输出
- branch HEAD -> FETCH_HEAD
但 origin/branch1 没有转到远程头所在的提交,因此我无法重置该特定提交。
同时:
git fetch
prompt - username <entered>
prompt - password <entered>
使 origin/branch1 提交到我想要的位置,然后我可以重置它。
我希望通过某种方式来执行 运行 git fetch
命令(可以包括凭据或访问令牌)并获取 branch1 上的远程更改,以便我可以重置它。由于我正在 运行ning 来自 python 子流程,因此我无法为提示提供凭据。
git fetch https://<access-token>@repo-url :origin/branch1
git fetch
的参数是:
- 遥控器的名称...或者,如果您固执己见,您可以可以在此处使用原始 URL 而不是名称一个遥控器,这就是你所做的;
- 任意数量的 refspecs。您使用了一个 refspec,特别是
:origin/branch1
.
Refspecs 的一般形式为 <em>src</em>:<em>dst</em>
,其中 src
部分是在 source 存储库中找到的引用的名称,例如分支或标签名称,并且 dst
是在您自己的存储库中找到的名称。 (这可能以强制标志 +
为前缀。)在这种情况下,您 省略了 源并仅提供了目的地。由于您使用的是 git fetch
,因此另一个 Git 是来源。所以在这里,你没有提供源存储库中的分支名称并且git fetch
不会尝试猜测。
如果您希望使用他们的 branch1
作为您的 origin/branch1
的来源,请提供正确的 refspec。使用 完整 参考名称也是明智的:
git fetch <url> refs/heads/branch1:refs/remotes/origin/branch1
例如。
标准获取,使用远程名称而不是 URL,从 远程获取默认 refspec。<em>name</em>.fetch
设置。对于名为 origin
的遥控器,这通常是:
+refs/heads/*:refs/remotes/origin/*
以便git fetch origin
获得所有他们的分支名称(refs/heads/*
),并使用它们来强制 更新所有相应的远程跟踪名称(refs/remotes/origin/*
,*
会自动适当填写)。如果您提供原始 URL 而不是远程名称 origin
的原因是您需要插入访问令牌,您可以这样做 和 提取 remote.origin.fetch
设置。例如:
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
参数中。
或者,如果您必须经常这样做,您可以只添加一个具有所需访问令牌的遥控器。请注意,即使新遥控器的名称不是 origin
,您也可以配置替代遥控器的 fetch refspec 以覆盖 refs/remotes/origin/*
。例如:
git remote add tokenized-origin <url-with-token>
git config remote.tokenized-origin.fetch '+refs/heads/*:refs/remotes/origin/*'
然后只是:
git fetch tokenized-origin
每当您想使用 URL-with-embedded-token 进行此更新时。
我有一个包含 master 和 branch1 的 git 仓库。 在 branch1- 我在两个位置克隆,我必须将它重置为一个位置的前一个提交,然后强制将其推送到远程并将其提取到另一个位置并重置它。我必须在一些带有子进程的 python 脚本中完成。因为我能够在 location1 中重置并强制推送到远程,但我无法使用 https URL 中的访问令牌在 location2 中获取它。如果我可以直接提供凭据,它可以正常工作,但不能使用访问令牌 URL.
尝试过:git fetch https://<access-token>@repo-url :origin/branch1
输出
- branch HEAD -> FETCH_HEAD
但 origin/branch1 没有转到远程头所在的提交,因此我无法重置该特定提交。 同时:
git fetch
prompt - username <entered>
prompt - password <entered>
使 origin/branch1 提交到我想要的位置,然后我可以重置它。
我希望通过某种方式来执行 运行 git fetch
命令(可以包括凭据或访问令牌)并获取 branch1 上的远程更改,以便我可以重置它。由于我正在 运行ning 来自 python 子流程,因此我无法为提示提供凭据。
git fetch https://<access-token>@repo-url :origin/branch1
git fetch
的参数是:
- 遥控器的名称...或者,如果您固执己见,您可以可以在此处使用原始 URL 而不是名称一个遥控器,这就是你所做的;
- 任意数量的 refspecs。您使用了一个 refspec,特别是
:origin/branch1
.
Refspecs 的一般形式为 <em>src</em>:<em>dst</em>
,其中 src
部分是在 source 存储库中找到的引用的名称,例如分支或标签名称,并且 dst
是在您自己的存储库中找到的名称。 (这可能以强制标志 +
为前缀。)在这种情况下,您 省略了 源并仅提供了目的地。由于您使用的是 git fetch
,因此另一个 Git 是来源。所以在这里,你没有提供源存储库中的分支名称并且git fetch
不会尝试猜测。
如果您希望使用他们的 branch1
作为您的 origin/branch1
的来源,请提供正确的 refspec。使用 完整 参考名称也是明智的:
git fetch <url> refs/heads/branch1:refs/remotes/origin/branch1
例如。
标准获取,使用远程名称而不是 URL,从 远程获取默认 refspec。<em>name</em>.fetch
设置。对于名为 origin
的遥控器,这通常是:
+refs/heads/*:refs/remotes/origin/*
以便git fetch origin
获得所有他们的分支名称(refs/heads/*
),并使用它们来强制 更新所有相应的远程跟踪名称(refs/remotes/origin/*
,*
会自动适当填写)。如果您提供原始 URL 而不是远程名称 origin
的原因是您需要插入访问令牌,您可以这样做 和 提取 remote.origin.fetch
设置。例如:
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
参数中。
或者,如果您必须经常这样做,您可以只添加一个具有所需访问令牌的遥控器。请注意,即使新遥控器的名称不是 origin
,您也可以配置替代遥控器的 fetch refspec 以覆盖 refs/remotes/origin/*
。例如:
git remote add tokenized-origin <url-with-token>
git config remote.tokenized-origin.fetch '+refs/heads/*:refs/remotes/origin/*'
然后只是:
git fetch tokenized-origin
每当您想使用 URL-with-embedded-token 进行此更新时。