我想在遠程服務器上執行以下命令:有沒有簡單的方法來「混帳描述」遠程存儲庫?
git archive --prefix="$tag/" --remote="ssh://$gitserver/var/git/$repo" "$tag" | tar -xvf-
問題是我不知道是什麼$tag
是。它應該是最新克隆上的git describe --abbrev=0
的輸出,但我不知道如何在沒有創建存儲庫本地克隆的情況下獲取該信息。有沒有可能做到這一點,而無需製作本地克隆?
我想在遠程服務器上執行以下命令:有沒有簡單的方法來「混帳描述」遠程存儲庫?
git archive --prefix="$tag/" --remote="ssh://$gitserver/var/git/$repo" "$tag" | tar -xvf-
問題是我不知道是什麼$tag
是。它應該是最新克隆上的git describe --abbrev=0
的輸出,但我不知道如何在沒有創建存儲庫本地克隆的情況下獲取該信息。有沒有可能做到這一點,而無需製作本地克隆?
,你可以開始解析你的標籤,而無需添加太多到本地磁盤上,唯一的辦法是:
git fetch --dry-run
將加載遠程回購的包文件,雖然。
我不認爲你可以查詢這個信息,而無需下載東西。
我已經做到了爲實例gitolite回購:
[email protected] /c/prog/git
$ git init g2
Initialized empty Git repository in c:/prog/git/g2/.git/
[email protected] /c/prog/git
$ cd g2
[email protected] /c/prog/git/g2 (master)
$ git remote add origin https://github.com/sitaramc/gitolite.git
[email protected] /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
正如上面提到的,唯一的痕跡是包文件,那麼至少你可以很容易地清除他們,一旦你有你的信息:
[email protected] /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 .
#!/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
有趣的選項。 +1 – VonC
'git ls-remote'絕對是你想要的。 +1。 – jszakmeister
這是一個非常酷的腳本,它在命令行上工作得非常好......但我不能在我的項目中使用awk。所以我試圖提取它的含義......'tag = $ 3'應該等於標籤名稱,不帶refs/tags /前綴,對吧? curl-s一直告訴我'Not Found' – shigazaru