如何使用 gitpython 在远程获取最新的提交哈希?
How to get the latest commit hash on remote using gitpython?
有没有一种方法可以使用 gitpython 获取远程存储库上的最新提交?
我不想在本地分支上执行拉取或合并等操作。我也不想依赖本地的 master 分支来获取此信息。我所拥有的只是一个有效的存储库,我正在使用 repo.remotes.origin.url
来获取信息。
仅使用存储库 URL,我可以获得该存储库的最新提交吗?
使用gitpython,没有本地克隆就无法做到这一点。 Git 是一个分布式系统,所以它是为用户在他们的本地存储库上操作而设计的。这些答案给出了一些不错的解释和替代方案:
使用 gitpython - 需要本地存储库
您可以进行浅克隆(为了提高速度),使用 git rev-parse
或 git ls-remote
获取最新提交的 SHA,然后删除本地存储库。
import git
from pathlib import Path
repo_url = 'https://github.com/path/to/your/repo.git'
local_repo_dir = Path('/path/to/your/repo')
# delete the repo if it exists, perform shallow clone, get SHA, delete repo
local_repo_dir.unlink(missing_ok=True)
repo = git.Repo.clone_from(repo_url, local_repo_dir, depth=1)
sha = repo.rev_parse('origin/master')
local_repo_dir.unlink()
print(sha)
使用 python 子流程 - 不需要本地存储库
这个更简单的解决方案使用 git ls-remote
,不需要本地克隆。下面使用 subprocess
从没有本地克隆的远程仓库中获取给定分支的 SHA-1。请注意,需要通过在第一个选项卡处拆分来从输出响应中提取 SHA。
import subprocess
import re
repo_url = 'https://github.com/path/to/your/repo.git'
process = subprocess.Popen(["git", "ls-remote", repo_url], stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
sha = re.split(r'\t+', stdout.decode('ascii'))[0]
print(sha)
您 可以 使用 gitpython
执行此操作而无需先创建本地存储库:
remote_heads = git.cmd.Git().ls_remote(repo_url, heads=True)
有没有一种方法可以使用 gitpython 获取远程存储库上的最新提交?
我不想在本地分支上执行拉取或合并等操作。我也不想依赖本地的 master 分支来获取此信息。我所拥有的只是一个有效的存储库,我正在使用 repo.remotes.origin.url
来获取信息。
仅使用存储库 URL,我可以获得该存储库的最新提交吗?
使用gitpython,没有本地克隆就无法做到这一点。 Git 是一个分布式系统,所以它是为用户在他们的本地存储库上操作而设计的。这些答案给出了一些不错的解释和替代方案:
使用 gitpython - 需要本地存储库
您可以进行浅克隆(为了提高速度),使用 git rev-parse
或 git ls-remote
获取最新提交的 SHA,然后删除本地存储库。
import git
from pathlib import Path
repo_url = 'https://github.com/path/to/your/repo.git'
local_repo_dir = Path('/path/to/your/repo')
# delete the repo if it exists, perform shallow clone, get SHA, delete repo
local_repo_dir.unlink(missing_ok=True)
repo = git.Repo.clone_from(repo_url, local_repo_dir, depth=1)
sha = repo.rev_parse('origin/master')
local_repo_dir.unlink()
print(sha)
使用 python 子流程 - 不需要本地存储库
这个更简单的解决方案使用 git ls-remote
,不需要本地克隆。下面使用 subprocess
从没有本地克隆的远程仓库中获取给定分支的 SHA-1。请注意,需要通过在第一个选项卡处拆分来从输出响应中提取 SHA。
import subprocess
import re
repo_url = 'https://github.com/path/to/your/repo.git'
process = subprocess.Popen(["git", "ls-remote", repo_url], stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
sha = re.split(r'\t+', stdout.decode('ascii'))[0]
print(sha)
您 可以 使用 gitpython
执行此操作而无需先创建本地存储库:
remote_heads = git.cmd.Git().ls_remote(repo_url, heads=True)