【问题标题】:Commit history on remote repository在远程存储库上提交历史记录
【发布时间】:2012-12-06 04:34:45
【问题描述】:

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

【问题讨论】:

    标签: git git-log


    【解决方案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
    • 如果您没有在远程跟踪任何分支,您在获取时不需要指定&lt;refspec&gt;(或使用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,默认为ma​​ster。第二个是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 发行版,这对我来说没有多大意义......
            猜你喜欢
            • 2012-12-14
            • 2013-04-25
            • 2013-08-09
            • 2015-01-12
            • 1970-01-01
            • 1970-01-01
            • 2014-05-05
            • 2012-02-10
            • 1970-01-01
            相关资源
            最近更新 更多