在远程存储库上提交历史记录
Posted
技术标签:
【中文标题】在远程存储库上提交历史记录【英文标题】:Commit history on remote repository 【发布时间】:2012-12-06 04:34:45 【问题描述】:我正在尝试访问远程存储库上的分支提交历史记录。我查看了the doc,但找不到任何有关如何使用我的本地 git 客户端访问远程 repo 的提交历史的实质性信息。
【问题讨论】:
【参考方案1】:git log remotename/branchname
将显示该存储库中给定远程分支的日志,但仅显示您从其存储库“获取”到远程存储库的个人“副本”的日志。
请记住,您的存储库克隆将仅通过执行 git fetch
来更新其任何远程分支的状态。你不能直接连接到服务器查看那里的日志,你要做的是用git fetch
下载服务器的状态,然后在本地查看远程分支的日志。
也许另一个有用的命令可能是:
git log HEAD..remote/branch
这将显示远程分支中的提交,而不是当前分支中的提交 (HEAD
)。
【讨论】:
“您无法直接连接到服务器以检查那里的日志” - 这就是我遇到的问题 我只获得本地拉取的更改...注意远程的,甚至之前进行了提取。 在执行git fetch
时,您需要使用--all
从远程获取。
太糟糕了,所以我必须克隆 2GB 的对象才能查看提交日志?
嗨@TWiStErRob,您可以通过管理使用浅克隆获取的数据量来减轻痛苦(参见git-scm.com/docs/git-clone 中的--depth),然后使用(参见git-scm.com/docs/git-fetch 中的“shallow”)管理获取)。【参考方案2】:
注意。下面的“origin”用于表示克隆存储库的上游,将“origin”替换为远程存储库的描述性名称。 “远程引用”可以使用与克隆命令相同的格式。
git remote add origin <remote reference>
git fetch
git log origin/master
【讨论】:
@user1795998 远程仓库 Git URL,例如git://git.somedomain.tld/some/repo
如果您没有在远程跟踪任何分支,您在获取时不需要指定<refspec>
(或使用fetch --all
)吗?
“项目供应商/诊断”是什么意思?那是存储库中的文件夹吗?另一个分支?
一个存储库可以有多个分支,但“项目”不是与 git 相关的术语,从那里混淆到在这种情况下“项目”的含义。不过,这与这个问题有什么关系?
我不相信它可以在 GIT 中做到这一点。您必须先克隆该远程存储库,然后才能针对它发出 git 日志。【参考方案3】:
一种快速的方法是使用--bare
关键字进行克隆,然后检查日志:
git clone --bare git@giturl tmpdir
cd tmpdir
git log branch
【讨论】:
【参考方案4】:我不确定何时添加了过滤,但如果您只想获取历史记录/参考日志,这是一种排除对象 blob 的方法:
git clone --filter=blob:none --no-checkout --single-branch --branch master git://some.repo.git .
git log
【讨论】:
这是完美。鉴于其他答案,如果它能够在提供的答案旁边脱颖而出,那就太棒了。【参考方案5】:这对我有用:
git fetch --all
git log production/master
请注意,这会从所有遥控器中获取,即可能是您 "have to clone 2GB worth of objects just to look through the commit logs"。
【讨论】:
【参考方案6】:您只能在本地存储库中查看日志,但是其中可以包括您已设置的所有远程的提取分支。
所以,如果你克隆一个 repo...
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
所有选项都将像登录本地分支机构一样工作。
【讨论】:
【参考方案7】:我不相信这是可能的。我相信您必须在本地克隆该远程仓库并对其执行git fetch
,然后才能针对它发出git log
。
【讨论】:
假设您已经将 repo 克隆到本地并进行了一些更改。 .那么你想检查是否有人提交了远程仓库 如果您将此答案更改为“不可能”,那么这是最佳答案。无法使用远程 git 客户端访问远程 repo 的提交历史记录。【参考方案8】:git
不是像svn
这样的集中式单片机,所以您有两种选择:
为许多不同的平台(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 次提交限制为没有文件内容的最小本地副本并防止控制台输出。虽然在 fetch 期间打开连接和计算增量需要一些时间。
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 是因为它们的大小和安全性,没有广告
【讨论】:
【参考方案9】:这是一个 bash 函数,可以轻松查看远程日志。它需要两个可选参数。第一个是branch,默认为master。第二个是remote,默认是staging。
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 checkout $remote/branch ; git log ; git checkout -
。不只是git log $remote/branch
在这里工作吗?
@MichaelFirth 我刚刚检查过,确实可以。知道这真的会使辅助函数过时。谢谢!【参考方案10】:
您可以轻松获取远程服务器的日志。 方法如下:
(1) 如果通过 ssh 使用 git - 那么只需使用您的 git 登录名和密码登录到远程服务器 - 并 chdir 存储库所在的远程文件夹 - 并在您的存储库中运行“git log”命令远程服务器。
(2) 如果通过 Unix 的标准登录协议使用 git - 那么只需 telnet 到您的远程服务器并在那里执行 git log。
希望这会有所帮助。
【讨论】:
换种说法,“您无法获取远程服务器的日志,您必须使用本地 git 客户端登录并获取日志” 只需删除这个答案,它不会回答问题,也不是大多数 git 用户没有服务器外壳访问权限的原因 #2:近 30 年来,我一直在使用和破解各种 UNIX 和 Linux 发行版,这对我来说没有多大意义......以上是关于在远程存储库上提交历史记录的主要内容,如果未能解决你的问题,请参考以下文章