क्लोनिंग के बिना गिट रेपो में फाइल ब्राउज़ करें और प्रदर्शित करें


107

क्या पहली बार क्लोनिंग के बिना गिट रेपो में फ़ाइलों को ब्राउज़ करने और प्रदर्शित करने का एक तरीका है? मैं उन कमांडों का उपयोग करके svn में कर सकता हूं:

svn ls / path / to / repo 
svn बिल्ली / पथ / से / रेपो / फ़ाइल-इन-रेपो

मैं निश्चित रूप से git शो का उपयोग कर सकता हूं लेकिन कर रहा हूं:

git show / path / to / repo
git शो HEAD: / पाथ / टू / रेपो

के लिए परिणाम

घातक: जीएटी रिपॉजिटरी नहीं

जवाबों:


72

आप git ls-remoteजो कमांड चाहते हैं , वह आपको दूरस्थ रिपॉजिटरी के बारे में कुछ जानकारी प्राप्त करने की अनुमति देता है, लेकिन आप इतिहास या सूची निर्देशिका या उस स्तर के कुछ भी दिखा सकते हैं: अनिवार्य रूप से यह केवल दूरस्थ वस्तुओं को बहुत उच्च-स्तर पर देखने की सुविधा देता है (आप इसे देख सकते हैं वर्तमान हेड और उदाहरण के लिए टैग)।

एकमात्र वास्तविक तरीका जो आप चाहते हैं (यदि मैं सही ढंग से समझता हूं) ssh का उपयोग दूरस्थ कमांड चलाने और परिणामों को वापस करने के लिए किया जाएगा, उदाहरण के लिए:

ssh me@otherhost "cd repo && git log -n 10"

आप जो चाहते हैं, अगर वे इसे जोड़ सकते हैं तो सुंदर कार्यक्षमता होगी, लेकिन मैंने जो पढ़ा है वह बहुत आसान नहीं है क्योंकि इतिहास आदि प्राप्त करने के लिए स्थानीय होने के लिए बहुत सारी जानकारी की आवश्यकता होती है, और उस बिंदु पर आपने एक git लाने का काम किया होगा ।


14
git cloneहालाँकि, एक चीज़ जो आप कर सकते हैं , वह है केवल एक संशोधन को पास करके --depth 1। यह संभावित रूप से बड़ी मात्रा में इतिहास प्राप्त करने से बचता है, और "पुनरीक्षण में कौन सी फाइलें मौजूद हैं" जैसे सवालों के जवाब देने के लिए पर्याप्त होगा abcdef1234567890?
22

21

Git को वर्जन कंट्रोल सिस्टम वितरित किया जाता है, जबकि Subversion सेंट्रलाइज्ड (क्लाइंट-सर्वर) वर्जन कंट्रोल सिस्टम होता है। वे अलग तरह से काम करते हैं; उस की आदत डाल लें। StackOverflow पर प्रश्न के बराबरsvn status -u लाने के लिए उस अंतर के परिणामों की व्याख्या करने वाले मेरे उत्तर को पढ़ें ।

खुद को थोड़ा दोहराते हुए: केंद्रीकृत संस्करण नियंत्रण प्रणाली (जैसे सीवीएस या तोड़फोड़) में लगभग सभी कमांड सर्वर पर संसाधित होते हैं , और नेटवर्क को शामिल करते हैं। बहुत कम आदेश स्थानीय स्तर पर किए जाते हैं। ध्यान दें कि "svn स्टेटस" और "svn diff" का अच्छा प्रदर्शन करने के लिए क्लाइंट पर चेक-आउट वर्जन की "सबवर्सन स्टोर्स 'प्रिस्टिन कॉपी', उन कॉमन ऑपरेशंस के लिए नेटवर्क ट्रांसफर को शामिल नहीं करना है (इसका मतलब है कि सबवर्सन चेकआउट - 2 x) कम से कम कार्यशील निर्देशिका का आकार)।

वितरित संस्करण नियंत्रण प्रणाली (जैसे Git, Mercurial या Bazaar) में, जहाँ आपके पास संपूर्ण भंडार की स्थानीय प्रति (क्लोन) होती है, लगभग सभी आदेश क्लाइंट पर किए जाते हैं । बहुत कम आदेशों को अन्य रिपॉजिटरी (सर्वर से) के लिए नेटवर्क कनेक्शन की आवश्यकता होती है।

सर्वर पर आपके द्वारा निष्पादित की जाने वाली कमांड की संख्या सीमित है।

  • आप " git ls-Remote <URL>" के साथ रिमोट पर सभी संदर्भों को सूचीबद्ध कर सकते हैं ।
  • आप
    " git संग्रह --remote = <URL> HEAD" के साथ रिपॉजिटरी (यदि दूरस्थ सर्वर ने इसे सक्षम किया है) का स्नैपशॉट प्राप्त कर सकते हैं ।
  • आप
    " git clone --depth = 1 <URL>" के साथ केवल कुछ अंतिम कमिट (तथाकथित "उथला क्लोन") क्लोन कर सकते हैं।
  • यदि सर्वर रिपॉजिटरी को git वेब इंटरफेस प्रदान करता है, तो आप इसे ब्राउज़ करने के लिए उपयोग कर सकते हैं।

36
जैसा कि आप कर रहे हैं सही है, यदि आप पहले क्लोनिंग के बिना एक रिमोट रेपो ब्राउज़ कर रहे हैं, तो जाहिर है कि आपने तय किया है कि गिट की ऑफ़लाइन क्षमताओं को त्यागना ठीक है। यह देखते हुए, मुझे यह दिखावा करने का कोई कारण नहीं है कि यह कुछ चीजों के लिए उपयोगी सुविधा नहीं होगी, उदाहरण के लिए, एक स्थानीय क्लाइंट जो आपको दूरस्थ रेपो की फ़ाइल सामग्री को स्थानीय रूप से ब्राउज़ करने की अनुमति देता है।
लेडीकैलिन

12
सहमत, जकुब जो स्थिति लेता है वह अत्यधिक प्रतिबंधात्मक है। यह इंगित करने के लिए एक बार से अधिक प्रतिष्ठा खोने के लायक है।
ctpenrose

9
मैं "उस आदत का उपयोग करता हूं" टोन को नापसंद करता हूं। लेकिन जब अंत तक रीडिन मुझे अपनी वर्तमान समस्या का हल मिल गया - यह देखने के लिए कि 110 रिपॉजिटरी में क्या है, मेरे पास एक git है, लेकिन कोई ssh या शेल एक्सेस नहीं है, और जो हैं सभी शायद काफी बड़े, कुछ 12GB या तो। इसलिए एक कम गहराई वाली क्लोन कम से कम केवल हाल के दिलचस्प इतिहास को देखने में मदद करती है। और जितने संभव हो उतने छोटे रेपो बनाएं।
हेनिंग

3
इस तरह की कार्यक्षमता को कोड समीक्षा टूल के मामले में अच्छा लगेगा जहां आपको पूरे रेपो की जरूरत नहीं है बस परिवर्तनों के साथ लॉग इन करें पर्याप्त है।
लुकाज़ लेनार्ट

2
@ हेनिंग, आप सही हैं, मुझे लगता है कि आप इसे "टोन लोल
एसएन

17

कुछ परिवहन प्रोटोकॉल के बारे में जानकारी के लिए http://git-scm.com/book/en/Git-Internals-Transfer-Protocols पर एक नज़र डालें । ध्यान दें कि यह SSH के मानक git के लिए काम नहीं करेगा।

SSH के ऊपर git के लिए, एक अप-टू-डेट सर्वर-साइड git आपको रिमोट से सीधे गिट-आर्काइव करने की अनुमति देता है, जिसे आप किसी दिए गए कमिट में सभी फाइलों की सूची प्राप्त करने के लिए "tar t" पर पाइप कर सकते हैं।


13

GitHub svn संगत है इसलिए आप svn ls का उपयोग कर सकते हैं

svn ls https://github.com/user/repository.git/branches/master/

BitBucket git आर्काइव को सपोर्ट करता है ताकि आप टर्क आर्काइव को डाउनलोड कर सकें और आर्काइव्ड फाइल्स को लिस्ट कर सकें। यह बहुत कुशल नहीं है लेकिन काम करता है:

git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t

6
GitHub के साथ Git को भ्रमित न करें :)
LR

यह भी काफी नाजुक लगता है - कई (लगभग 100) रिपोज पर चल रहा है, मुझे svn से विभिन्न त्रुटियां मिलती हैं: "गैर-निर्देशिका की प्रविष्टियां नहीं मिल सकती हैं" "500 आंतरिक सर्वर त्रुटि" "अधिक क्रेडेंशियल्स नहीं"
माइकलचिरिको

5

सटीक नहीं है, लेकिन चारों ओर एक रास्ता है।

GitHub डेवलपर API का उपयोग करें

  1. इसे खोलने से आपको हाल ही में आने वाले काम मिल जाएंगे।

    https://api.github.com/repos/learningequality/ka-lite/commits

    आप उपरोक्त यूआरएल के अंत में प्रतिबद्ध हैश संलग्न करके विशिष्ट प्रतिबद्ध विवरण प्राप्त कर सकते हैं।

  2. सभी फाइलें (आपको मुख्य पेड़ के लिए शा की जरूरत है)

    https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

मुझे उम्मीद है कि यह मदद कर सकता है।


17
GitHub के साथ Git को भ्रमित न करें - मेरा मानना ​​है कि मूल प्रश्न Git के बारे में था। Git इंस्टॉलेशन / होस्टिंग (GitHub / BitBucket / Stash) में ब्राउज़र रिपॉजिटरी की विभिन्न संभावनाएँ हो सकती हैं।
क्रिज़िस्तोफ़ वोलनी

अच्छा विचार @ अनुराग कानूनगो बॉक्स के बाहर
सोचता है ist

2

इसे शायद कुछ लोगों द्वारा गंदा माना जाता है, लेकिन जीथब रिपॉजिटरी के मामले में एक बहुत ही व्यावहारिक समाधान सिर्फ एक स्क्रिप्ट बनाने के लिए है, उदाहरण के लिए "git-ls":

#!/bin/sh
remote_url=${1:? "$0 requires URL as argument"}
curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/"

इसे निष्पादन योग्य और निश्चित रूप से उपलब्ध करने योग्य बनाएं chmod a+x git-ls; sudo cp git-ls /usr/local/bin:। अब, आप इसे अपनी इच्छानुसार चलाते हैं:

git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules

यह भी जान लें कि git instawebआपकी स्थानीय फाइलों की उपयोगिता है। फ़ाइलों को दिखाने की क्षमता और ऐसा सर्वर होना चाहिए जो मेरी राय में git की अंतर्निहित विकेंद्रीकृत विशेषताओं को नष्ट न करे।


मुझे इसका कोई परिणाम नहीं मिल रहा है। कर्ल कुछ भी वापस करने के लिए प्रतीत नहीं होता है।
मैथ्यू पढ़ें

अब मैं निश्चित रूप से अनारुग से आपी विधि की सिफारिश करूंगा। यह विधि अभी भी काम करती है:curl -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|'
ऐनी वैन रोसुम

-1

यदि आपको पता है कि आप जिस रिमोट ब्रांच को चेक करना चाहते हैं, आप उसके माध्यम से नवीनतम पता कर सकते हैं:

git ls-tree -r <remote_branch> --name-only

8
यह काम नहीं करता है अगर आप पहले से रेपो को क्लोन नहीं करते हैं :(
बैलिंट स्ज़ेगेटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.