我正在尝试访问远程存储库上的分支提交历史记录。我看了一下文档,但没有找到任何关于如何使用本地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 clone git@gitserver:folder/repo.git
这将默认为origin/master。
你可以添加一个远程到这个回购,除了原点让我们添加生产。在本地克隆文件夹中:
git remote add production git@production-server:folder/repo.git
如果我们想查看生产日志,我们需要做的是:
git fetch --all
从所有的远程(默认获取没有——ALL将只从原点获取)
获取之后,我们可以查看生产远程上的日志,您还必须指定分支。
git log production/master
所有选项都将像登录本地分支一样工作。
一个快速的方法是使用——bare关键字进行克隆,然后检查日志:
git clone --bare git@giturl tmpdir
cd tmpdir
git log branch
您可以很容易地获得远程服务器的日志。 方法如下:
(1)如果通过ssh使用git -那么只需使用你的git登录名和密码登录到远程服务器-并chdir你的存储库所在的远程文件夹-然后在远程服务器上的存储库中运行"git log"命令。
(2)如果通过Unix的标准登录协议使用git,那么只需telnet到远程服务器并在那里执行git日志。
希望这能有所帮助。
这对我来说很管用:
git fetch --all
git log production/master
注意,这是从所有远程获取的,也就是说,你可能“不得不克隆2GB的对象,只是为了查看提交日志”。
我不确定什么时候添加了过滤,但如果你只想获取历史/ref-logs,这是一种排除对象blobs的方法:
git clone --filter=blob:none --no-checkout --single-branch --branch master git://some.repo.git .
git log
这里有一个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
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是因为它们的尺寸和安全性,没有广告
我正在寻找包含特定提交的远程分支
下面是一个快速脚本,您可以使用它作为示例
spark
✦ ❯ cat run.sh
for b in $(git branch -r)
do
hasKryoCommit=$(git log "$b" | grep 3e033035a3c0b7d46c2ae18d0d322d4af3808711)
if test -n "$hasKryoCommit"
then
echo "$b"
fi
done
spark
✦ ❯ bash run.sh
origin/HEAD
fatal: unrecognized argument: ->
origin/master
origin/branch-2.4
origin/branch-3.0
origin/branch-3.1
origin/branch-3.2
origin/master
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?