2011-11-08 6 views
5

मैं एक दूरस्थ सर्वर पर निम्न आदेश पर अमल करना चाहते हैं:क्या रिमोट रिपोजिटरी "गिट वर्णन" करने का कोई आसान तरीका है?

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

समस्या मैं नहीं जानता कि क्या $tag है। यह अद्यतित क्लोन पर git describe --abbrev=0 का आउटपुट होना चाहिए, लेकिन मुझे नहीं पता कि रिपोजिटरी के स्थानीय क्लोन किए बिना उस जानकारी को कैसे प्राप्त किया जाए। क्या स्थानीय क्लोन बनाने के बिना ऐसा करना संभव है?

उत्तर

3

एक ही रास्ता है कि आप अपने टैग के लिए पार्स करने, अपने स्थानीय डिस्क को बहुत ज्यादा जोड़े बिना शुरू कर सकता है, हो सकता है:

  • एक खाली रेपो
  • बनाने के अपने दूरस्थ रेपो के दूरदराज पता जोड़ने
  • एक 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 . 
11
#!/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 
+2

दिलचस्प विकल्प। +1 – VonC

+3

'गिट एलएस-रिमोट' निश्चित रूप से आप चाहते हैं कि क्या है। +1। – jszakmeister

+0

यह एक बहुत ही अच्छी स्क्रिप्ट है और यह कमांड लाइन पर बहुत अच्छी तरह से काम करता है ... लेकिन मैं अपने प्रोजेक्ट में अजीब का उपयोग नहीं कर सकता। इसलिए मैं इसका अर्थ निकालने के लिए तैयार हूं ... टैग = $ 3' को टैग नाम के बराबर होना चाहिए, बिना refs/टैग/उपसर्ग के, सही? कर्ल-मुझे बताता है कि 'नहीं मिला' – shigazaru

संबंधित मुद्दे