【问题标题】:Is there a simple way to "git describe" a remote repository?有没有一种简单的方法来“git describe”远程存储库?
【发布时间】:2011-11-08 18:02:48
【问题描述】:

我想在远程服务器上执行以下命令:

git archive --prefix="$tag/" --remote="ssh://$gitserver/var/git/$repo" "$tag" | tar -xvf-

问题是我不知道$tag 是什么。它应该是最新克隆上git describe --abbrev=0 的输出,但我不知道如何在不制作存储库的本地克隆的情况下获取该信息。是否可以在不进行本地克隆的情况下做到这一点?

【问题讨论】:

    标签: git clone


    【解决方案1】:
    #!/usr/bin/awk -f
    BEGIN {
      FS = "[ /^]+"
      while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
        if (!sha)
          sha = substr($0, 1, 7)
        tag = $3
      }
      while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
        if ($3 ~ "commits")
          com = $2
      printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
    }
    

    样本输出

    $ git-describe-remote.awk https://github.com/stedolan/jq
    jq-1.4-148-g89791a0
    

    【讨论】:

    • git ls-remote 绝对是您想要的。 +1。
    • 这是一个非常酷的脚本,它在命令行上运行良好......但我不能在我的项目中使用 awk。所以我想提取它的含义...tag = $3 应该等于标签名称,没有 refs/tags/ 前缀,对吗? curl -s 一直告诉我Not Found
    • 好的,我明白了,我期待完整的 html 不是预期的。但是您只是在此版本的完整 github.com html 中查找 $3 是“提交”的行,并选择提交的数量。好的。谢谢
    【解决方案2】:

    在不向本地磁盘添加 太多 的情况下开始解析标签的唯一方法是:

    • 做一个空的回购
    • 添加远程仓库的远程地址
    • 试试git fetch --dry-run

    不过,这将加载远程仓库的包文件。
    我不认为你可以在不下载东西的情况下查询这些信息。

    例如,我已经为 gitolite repo 完成了它:

    VonC@NETVONC /c/prog/git
    $ git init g2
    Initialized empty Git repository in c:/prog/git/g2/.git/
    
    VonC@NETVONC /c/prog/git
    $ cd g2
    
    VonC@NETVONC /c/prog/git/g2 (master)
    $ git remote add origin https://github.com/sitaramc/gitolite.git
    
    VonC@NETVONC /c/prog/git/g2 (master)
    $ git fetch --dry-run
    remote: Counting objects: 5114, done.
    remote: Compressing objects: 100% (1919/1919), done.
    remote: Total 5114 (delta 3548), reused 4664 (delta 3142)
    Receiving objects: 100% (5114/5114), 1.81 MiB | 722 KiB/s, done.
    Resolving deltas: 100% (3548/3548), done.
    From https://github.com/sitaramc/gitolite
     * [new branch]      bp-v2.0.3  -> origin/bp-v2.0.3
     * [new branch]      fedora-temp -> origin/fedora-temp
     * [new branch]      gh-pages   -> origin/gh-pages
     * [new branch]      master     -> origin/master
     * [new branch]      pu         -> origin/pu
     * [new branch]      temp-br--data-dumper-problem-demo -> origin/temp-br--data-dumper-problem-demo
     * [new branch]      vrs        -> origin/vrs
     * [new tag]         v2.1       -> v2.1
    From https://github.com/sitaramc/gitolite
     * [new tag]         v0.50      -> v0.50
     * [new tag]         v0.55      -> v0.55
    [...]
     * [new tag]         v2.0rc2    -> v2.0rc2
     * [new tag]         v2.1       -> v2.1
                                       ^^^^
                                        |
                                        --- could be the tag you need
    

    如上所述,唯一的痕迹是包文件,因此至少您可以在获得信息后轻松清理它们:

    VonC@NETVONC /c/prog/git/g2 (master)
    $ l .git/objects/pack/
    total 1000
    drwxr-xr-x    4 VonC     Administ        0 Nov  8 19:45 ..
    -r--r--r--    1 VonC     Administ  1898987 Nov  8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.pack
    -r--r--r--    1 VonC     Administ   144264 Nov  8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.idx
    drwxr-xr-x    2 VonC     Administ     4096 Nov  8 19:46 .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多