在远程存储库上提交历史记

时间:2012-12-18 21:43:31

标签: git git-log

我正在尝试访问远程存储库上的分支的提交历史记录。我查看了the doc但是找不到有关如何使用我的本地git客户端访问远程repo的提交历史记录的任何实质性信息。

10 个答案:

答案 0 :(得分:222)

git log remotename/branchname

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

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

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

git log HEAD..remote/branch

将显示远程分支中的提交,但不会显示当前分支(HEAD)中的提交。

答案 1 :(得分:52)

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

答案 2 :(得分:11)

您只能查看本地存储库上的日志,但是这可以包括您已设置的所有远程控制器的已获取分支。

所以,如果你克隆一个回购......

git clone git@gitserver:folder/repo.git

默认为origin/master

您可以向此回购添加遥控器,而不是origin添加production。从本地克隆文件夹中:

git remote add production git@production-server:folder/repo.git

如果我们想查看production的日志,我们需要这样做:

git fetch --all 

这是从所有遥控器中提取的(默认提取没有--all只能从origin获取)

获取后我们可以查看production遥控器上的日志,您还必须指定分支。

git log production/master

所有选项都可以像登录本地分支一样工作。

答案 3 :(得分:10)

我不相信这是可能的。我相信您必须在本地克隆该远程仓库并在其上执行git fetch,然后才能对其发出git log

答案 4 :(得分:10)

快速执行此操作的方法是使用--bare关键字进行克隆,然后检查日志:

git clone --bare git@giturl tmpdir
cd tmpdir
git log branch

答案 5 :(得分:10)

这对我有用:

git fetch --all 
git log production/master

请注意,这是从所有遥控器中提取的,即可能是"have to clone 2GB worth of objects just to look through the commit logs"

答案 6 :(得分:4)

我不确定何时添加过滤,但是如果您只想获取历史记录/引用日志,这是一种排除对象斑点的方法:

git clone --filter=blob:none --no-checkout --single-branch --branch master git://some.repo.git .
git log

答案 7 :(得分:0)

您可以轻松获取远程服务器的日志。 方法如下:

(1)如果通过ssh使用git - 那么只需使用你的git登录名和密码登录到远程服务器 - 并使用存储库所在的远程文件夹chdir-并在你的存储库中运行“git log”命令远程服务器。

(2)如果通过Unix的标准登录协议使用git,那么只需telnet到你的远程服务器并在那里做一个git log。

希望这有帮助。

答案 8 :(得分:0)

这是一项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

答案 9 :(得分:0)

git不是svn这样的集中式scm,因此您有两个选择:

为许多不同的平台(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

通过将一个分支的3次提交限制为最小的本地副本(不包含文件内容)并防止控制台输出,从而对性能进行了优化。尽管在获取期间打开连接并计算增量会花费一些时间。


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是因为它们的大小和安全性,没有广告