我正在尝试访问远程存储库上的分支提交历史记录。我看了一下文档,但没有找到任何关于如何使用本地git客户端访问远程回购的提交历史的实质性信息。


当前回答

我不相信这是可能的。我相信你必须在本地克隆远程repo,并在它上执行git取回,然后才能对它发布git日志。

其他回答

NB。下面的“origin”用于表示克隆存储库的上游,将“origin”替换为远程回购的描述性名称。“remote reference”与“clone”命令格式相同。

git remote add origin <remote reference>
git fetch
git log origin/master
git log remotename/branchname

将显示该存储库中给定的远程分支的日志,但仅显示您从其存储库“获取”到远程存储库的个人“副本”的日志。

请记住,您的存储库克隆只会通过git获取来更新其任何远程分支的状态。你不能直接连接到服务器来检查日志,你要做的是用git fetch下载服务器的状态,然后在本地查看远程分支的日志。

也许另一个有用的命令是:

git log HEAD..remote/branch

它会显示远程分支中的提交,而不是当前分支中的提交(HEAD)。

Git不是像SVN那样的集中式SCM,所以你有两个选择:

使用目标平台的web界面(如GitHub REST API或GitLab REST API) 下载存储库并在本地显示日志

对于许多不同的平台(GitHub, GitLab, BitBucket, SourceForge, Launchpad, Gogs,…)实现它可能很烦人,但获取数据非常慢(我们谈论的是秒)-没有解决方案是完美的。


一个抓取临时目录的例子:

git clone https://github.com/rust-lang/rust.git -b master --depth 3 --bare --filter=blob:none -q .
git log -n 3 --no-decorate --format=oneline

另外:

git init --bare -q
git remote add -t master origin https://github.com/rust-lang/rust.git
git fetch --depth 3 --filter=blob:none -q
git log -n 3 --no-decorate --format=oneline origin/master

这两种方法都对性能进行了优化,将一个分支的提交限制在一个没有文件内容的最小本地副本中,并且防止控制台输出。尽管打开连接并在获取过程中计算增量需要一些时间。


GitHub的一个例子:

GET https://api.github.com/repos/rust-lang/rust/commits?sha=master&per_page=3

一个GitLab的例子:

GET https://gitlab.com/api/v4/projects/inkscape%2Finkscape/repository/commits?ref_name=master&per_page=3

两者都非常快,但有不同的界面(就像每个平台一样)。


声明:选择Rust和Inkscape是因为它们的尺寸和安全性,没有广告

这里有一个bash函数,可以方便地在远程上查看日志。它有两个可选参数。第一个是分支,默认为master。第二个是远程,它默认为登台。

git_log_remote() {
  branch=${1:-master}
  remote=${2:-staging}
  
  git fetch $remote
  git checkout $remote/$branch
  git log
  git checkout -
}

例子:

 $ git_log_remote
 $ git_log_remote development origin

我不相信这是可能的。我相信你必须在本地克隆远程repo,并在它上执行git取回,然后才能对它发布git日志。