मैं URL कैसे निर्धारित कर सकता हूं कि एक स्थानीय गिट रिपॉजिटरी को मूल रूप से क्लोन किया गया था?


4091

मैंने कुछ दिन पहले GitHub से एक प्रोजेक्ट निकाला। जब से मुझे पता चला है कि GitHub पर कई कांटे हैं, और मैंने यह नोट करने की उपेक्षा की कि मैंने मूल रूप से कौन सा लिया। मैं यह कैसे निर्धारित कर सकता हूं कि मैंने कौन से कांटे खींचे?


162
जीआईटी 2.7 (क्यू 4 2015) के साथ git remote get-url originसंभव होगा। देखें नीचे मेरा उत्तर
VonC


21
git remote get-url originमेरे लिए काम नहीं करता है - संभवतः पदावनत? git remote show originहालांकि काम किया।
क्लीक

46
git remote -vइस सहित आपको बहुत सी जानकारी देते हैं।
थोरबजोरन राव एंडरसन

git remote get-url origin --pushठीक काम करता है, स्पष्ट रूप से मूल्यह्रास नहीं किया जाता है और अच्छी संक्षिप्त जानकारी प्रदान करता है ( बहुत क्रिया git remote show originहो सकती है ) qv । git help remote
नील

जवाबों:


5753

यदि आप केवल दूरस्थ URL चाहते हैं, या यदि आपका नेटवर्क किसी ऐसे नेटवर्क से कनेक्ट नहीं है, जो दूरस्थ रेपो तक पहुँच सकता है:

git config --get remote.origin.url

आप पूर्ण उत्पादन की आवश्यकता होती है और आप तो कर रहे हैं एक नेटवर्क जहां मूल रहता है कि दूरदराज के रेपो तक पहुँच सकते हैं पर:

git remote show origin

का उपयोग करते समय git clone(GitHub से, या उस मामले के लिए किसी भी स्रोत भंडार) क्लोन के स्रोत के लिए डिफ़ॉल्ट नाम "मूल" है। उपयोग करने git remote showसे इस दूरस्थ नाम की जानकारी प्रदर्शित होगी। पहली कुछ पंक्तियों को दिखाना चाहिए:

C:\Users\jaredpar\VsVim> git remote show origin
* remote origin
  Fetch URL: git@github.com:jaredpar/VsVim.git
  Push  URL: git@github.com:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

यदि आप स्क्रिप्ट में मान का उपयोग करना चाहते हैं, तो आप इस उत्तर में सूचीबद्ध पहले कमांड का उपयोग करेंगे।


2
यदि amazon-s3 के साथ जिट का उपयोग करने के बजाय नीचे वर्णित के रूप में git config का उपयोग करें।
बैरीकु

6
यद्यपि मूल प्रश्न के उद्देश्य के लिए प्रासंगिक नहीं है, कृपया ध्यान दें कि यदि "पुश URL" प्राप्त करने का प्रयास किया गया है और कई URL निर्दिष्ट रिमोट के लिए दर्ज किए गए हैं, तो आपको या तो उपयोग करने की आवश्यकता होगी git remote show origin(वैकल्पिक रूप से @ द्वारा प्रदान किए गए -n ध्वज के साथ। केसी), या git remote -v@Montaro और @rodel द्वारा सुझाए गए अनुसार।
अमेजन

यह किस फ़ाइल को लिखा गया है? मैंने सोचा था कि .gitconfigफ़ाइल में यह होगा, लेकिन मैंने इसे अपने में नहीं देखा।
ayjay

1
@ संजय ´~/.gitconfigसभी gitरिपॉजिटरी के लिए वैश्विक है, यह यहां स्थानीय कॉन्फ़िगरेशन से आता है जो आमतौर पर .git/config(हालांकि गिट-सबमॉड्यूल के लिए उत्तर थोड़ा अधिक कठिन है)। ध्यान दें कि strace git config --get remote.origin.urlआपका दोस्त है।
टीनो

1
लेकिन मूल URL में वर्तमान में उपयोग किए गए रिमोट का URL होना आवश्यक नहीं है। वास्तविक उपयोग किए गए URL को दिखाने के लिए, आपको इस समाधान की आवश्यकता होगी: stackoverflow.com/a/40630957/1069083
rubo77

620

क्या आपको स्क्रिप्टिंग उद्देश्यों के लिए यह चाहिए, आप केवल URL के साथ प्राप्त कर सकते हैं

git config --get remote.origin.url

38
यह सही जवाब है। यह तेजी से रास्ता है और यह भी काम करता है, अगर दूरस्थ url अब उपलब्ध नहीं है ( git remote show originबस दिखाता है "conq: repos मौजूद नहीं है।")।
एपफ्लोबॉक्स

5
कॉन्फ़िगरेशन विकल्प के कारण यह बिल्कुल सही उत्तर नहीं है url.<base>.insteadOf। मेरा उत्तर देखें - git के पास इस उद्देश्य के लिए एक कमांड है।
कार्ल सस्टर

2
@arcresu कूल, आप को +1! मेरे बचाव में, कि आदेश नहीं जोड़ा गया था मार्च 2011 तक है, और यह सितंबर 2012 तक दर्ज नहीं किया गया था
Cascabel

1
@ कैत्स्कुल ओनली -जीत-डीआईआर प्रासंगिक है (कॉन्फिग, गिट डायर में है, वर्क ट्री लोकेशन से स्वतंत्र है), और यह मेरे लिए काम करता है। क्या आप सुनिश्चित हैं कि आपने वास्तविक .git के लिए पथ निर्दिष्ट किया है, न कि इसके मूल निर्देशिका का?
कैस्केबेल

553

तुम कोशिश कर सकते हो:

git remote -v

यह आपके सभी रीमोट्स का प्रिंट / URL प्रिंट कर देगा।


255

उत्तर पाने के लिए:

git ls-remote --get-url [REMOTE]

यह कॉन्फ़िगरेशन पढ़ने से बेहतर है; इसके लिए मैन पेजgit-ls-remote देखें :

--get-यूआरएल

दिए गए दूरस्थ रिपॉजिटरी के URL को किसी भी "url.<base>.insteadOf"विन्यास सेटिंग को ध्यान में रखते हुए विस्तारित करें (देखें git-config(1)) और रिमोट से बात किए बिना बाहर निकलें।

जैसा कि @ जेफ्रोमी ने बताया, इस विकल्प को v1.7.5 में जोड़ा गया था और v1.7.12.2 (2012-09) तक प्रलेखित नहीं किया गया था ।


2
अच्छा एक: यह भी पिछले संस्करणों के लिए समान प्रदान करेगा> git रिमोट -v | grep
भ्रूण

1
मुझे लगता है कि अधिकांश अन्य उत्तर git कमांड के बारे में शो-ऑफ और अधिक बताए जाते हैं और git इतिहास के बारे में बताते हैं। यह एकमात्र उत्तर है जो यह नहीं मानता है कि आपके अपस्ट्रीम को कहा जाता है origin
माइक डी

पुराने remote get-urlविकल्प के लिए यह सबसे प्रत्यक्ष प्रतिस्थापन है। यह एक ड्रॉप-इन प्रतिस्थापन है।
कलुआतु वॉन श्लेकर 22

111

जीआईटी 2.7 (5 जनवरी, 2015 को रिलीज़) के साथ, आपके पास एक अधिक सुसंगत समाधान है git remote:

git remote get-url origin

(अच्छा लटकन git remote set-url origin <newurl>)

देखें प्रतिबद्ध 96f78d3 (16 सितं, 2015) द्वारा बेन Boeckel ( mathstuf)
(द्वारा विलय Junio सी Hamano - gitster- में e437cbd प्रतिबद्ध , 05 अक्टूबर 2015) :

दूरस्थ: जोड़ो- url subcommand

विस्तार insteadOfकरना एक हिस्सा है ls-remote --urlऔर इसके विस्तार का कोई तरीका pushInsteadOfभी नहीं है। सभी कॉन्फ़िगर किए गए URL को प्राप्त करने के लिए दोनों के साथ-साथ क्वेरी करने में सक्षम होने के लिए
एक get-urlउपकमांड जोड़ें ।

get-url:

रिमोट के लिए URL पुनर्प्राप्त करता है।
के लिए विन्यास insteadOfऔर pushInsteadOfयहाँ विस्तारित हैं।
डिफ़ॉल्ट रूप से, केवल पहला URL सूचीबद्ध है।

  • ' --push' के साथ , पुश URLs को URL URL के बजाय क्वियर किया जाता है।
  • ' --all' के साथ , रिमोट के सभी URL सूचीबद्ध होंगे।

2.7 से पहले, आपके पास था:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]

4
5 वर्षों के बाद बहुत कुछ बदल गया है और इसे अभी स्वीकार किया जाना चाहिए। लेकिन हो सकता है कि प्री-2.7 सिंटैक्स को भी जोड़ें।
एमपीएस

58

संक्षेप में, कम से कम चार तरीके हैं:

(आधिकारिक लिनक्स भंडार के लिए निम्नलिखित प्रयास किया गया था)

कम से कम जानकारी:

$ git config --get remote.origin.url
https://github.com/torvalds/linux.git

तथा

$ git ls-remote --get-url
https://github.com/torvalds/linux.git

अधिक जानकारी:

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

और भी जानकारी:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/torvalds/linux.git
  Push  URL: https://github.com/torvalds/linux.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

4
नोट git config --get remote.origin.urlमूल URL को पुनर्प्राप्त करता है जो उस URL के साथ git remote add ...या उस git remote set-url ...समय git ls-remote --get-url originपुनर्प्राप्त किया गया था जो वास्तव में रिमोट तक पहुंचने के लिए उपयोग किया जाता है - जो उपस्थिति में भिन्न हो सकता है git config --global url.XXX.insteadOf YYYतो दोनों आउटपुट अलग हो सकते हैं! यह भी ध्यान दें कि git ls-remote --get-url(बिना origin) origin, कभी-कभी इसे पुनर्प्राप्त नहीं किया जाता है , इसके बजाय यह ट्रैक किए गए अपस्ट्रीम को दिखाता है, इसलिए यह अलग-थलग पड़ने वाले राज्य में उदाहरण के लिए विफल हो जाएगा।
टीनो

24

मुझे लगता है कि आप इसे पा सकते हैं .git/configऔर remote["origin"]अगर आपने इसमें कोई हेरफेर नहीं किया है।


22

संक्षिप्त जवाब:

$ git remote show -n origin

या, शुद्ध त्वरित स्क्रिप्ट के लिए एक विकल्प:

$ git config --get remote.origin.url

कुछ जानकारी:

  1. $ git remote -vसभी रीमोट प्रिंट करेगा (आप जो चाहते हैं) नहीं। आप मूल सही चाहते हैं?
  2. $ git remote show originबहुत बेहतर, केवल दिखाता है originलेकिन बहुत लंबा लगता है (git संस्करण 1.8.1.msysgit.1 पर परीक्षण किया गया)।

मैंने साथ समाप्त किया: $ git remote show -n originजो सबसे तेज़ लगता है। इसके साथ -nरिमोट हेड (AKA ब्रांच) नहीं आएंगे। आपको उस प्रकार की जानकारी की आवश्यकता नहीं है, है ना?

http://www.kernel.org/pub//software/scm/git/docs/git-remote.html

आप | grep -i fetchकेवल तीन URL लाने के लिए सभी तीन संस्करणों पर आवेदन कर सकते हैं ।

यदि आपको शुद्ध गति की आवश्यकता है, तो उपयोग करें:

$ git config --get remote.origin.url

@Jefromi के लिए धन्यवाद कि इंगित करने के लिए।


22

मेरे लिए, यह आसान तरीका है (कम टाइपिंग):

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

वास्तव में, मुझे लगता है कि aliasबुलाया में sहै:

git remote -v
git status

आप अपनी प्रोफ़ाइल के साथ जोड़ सकते हैं: alias s='git remote -v && git status'


17

मैं Git कमांड के सभी मापदंडों को कभी भी याद नहीं रख सकता, इसलिए मैंने केवल उस ~/.gitconfigफ़ाइल में एक उपनाम रखा है जो मुझे अधिक समझ में आता है, इसलिए मैं इसे याद रख सकता हूं, और इसका परिणाम कम टाइपिंग में है:

[alias]
url = ls-remote --get-url

टर्मिनल को फिर से लोड करने के बाद, आप बस टाइप कर सकते हैं:

> git url

यहाँ मेरे अक्सर इस्तेमाल किए जाने वाले कुछ और हैं:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags

मैं git-extras की भी अत्यधिक अनुशंसा करता हूं जिसमें एक git info कमांड है जो दूरस्थ और स्थानीय शाखाओं पर अधिक विस्तृत जानकारी प्रदान करता है।


मुझे यह बहुत पसंद है!
एल्फी

15

Git URL Git कॉन्फ़िगरेशन फ़ाइल के अंदर होगा। मान कुंजी से मेल खाती है url

मैक और लिनक्स के लिए नीचे दिए गए कमांड का उपयोग करें:

 cd project_dir
 cat .git/config | grep url | awk '{print $3}'

विंडोज के लिए किसी भी टेक्स्ट एडिटर में नीचे की फाइल को खोलें और कुंजी के लिए मान खोजें url

project_dir/.git/config

नोट: यह तब भी काम करेगा जब आप ऑफ़लाइन हैं या रिमोट गिट सर्वर को नीचे ले जाया गया है।


1
मूल चेकआउट की मेजबानी करने वाले रिमोट सर्वर को नीचे ले जाने के बाद एक बार मेरे लिए यही काम किया गया था। अन्य सभी प्रयास विफल रहे: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos

14

मैं मूल रूप से उपयोग करता हूं:

git remote get-url origin

यह विंडोज में Git Bash कमांड कंसोल या CMD कमांड कंसोल के लिए काम करता है। कहा कि, यह Git के संस्करण 2.x के साथ काम करता है।



10

अपस्ट्रीम के रिमोट को "मूल" नहीं कहा जा सकता है, इसलिए यहां भिन्नता है:

remote=$(git config --get branch.master.remote)
url=$(git config --get remote.$remote.url)
basename=$(basename "$url" .git)
echo $basename

या:

basename $(git config --get remote.$(git config --get branch.master.remote).url) .git

अधिक उपयोगी चर के लिए:

$ git config -l

9

के आईपी पते / hostname प्राप्त करने के लिए origin

के लिए ssh://खजाने:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/"

के लिए git://खजाने:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"

4
इसके लिए sshकेवल अनुपस्थिति में काम करता है, ~/.ssh/configजो hostname या alias को फिर से लिखता है।
टिनो

9

अन्य उत्तरों को पूरक करने के लिए: यदि रिमोट किसी कारण से बदल दिया गया है और इसलिए मूल उत्पत्ति को प्रतिबिंबित नहीं करता है , तो रिफ्लॉग में पहली पहली प्रविष्टि (यानी कमांड द्वारा प्रदर्शित अंतिम प्रविष्टि git reflog) को इंगित करना चाहिए कि रेपो मूल रूप से कहां क्लोन किया गया था से।

जैसे

$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$

(ध्यान रखें कि रिफ्लोज को शुद्ध किया जा सकता है, इसलिए यह काम करने की गारंटी नहीं है।)


1
यह शायद "मूल" रिमोट प्राप्त करने का एकमात्र वास्तविक तरीका है यदि इसे बदल दिया गया है।
जस्टिन ओह्स

8

आपके साथ git remote show originप्रोजेक्ट डायरेक्टरी में होना चाहिए। लेकिन यदि आप उन URL को कहीं और से निर्धारित करना चाहते हैं जो आप उपयोग कर सकते हैं:

cat <path2project>/.git/config | grep url

यदि आपको अक्सर इस आदेश की आवश्यकता होती है, तो आप अपने .bashrcया .bash_profileMacOS के साथ एक उपनाम परिभाषित कर सकते हैं ।

alias giturl='cat ./.git/config | grep url'

तो आपको बस giturlइसका URL प्राप्त करने के लिए Git रूट फ़ोल्डर में कॉल करना होगा।


यदि आप इस तरह इस उपनाम का विस्तार करते हैं

alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2'

आपको पूर्ववर्ती के बिना केवल सादा URL मिलता है

"Url ="

में

url = http://example.com/repo.git

आपको इसके उपयोग में अधिक संभावनाएँ मिलती हैं:

उदाहरण

मैक पर आप open $(giturl)मानक ब्राउज़र में URL खोलने के लिए कॉल कर सकते हैं ।

या chrome $(giturl)लिनक्स पर क्रोम ब्राउज़र के साथ इसे खोलने के लिए।



7

मनमाने ढंग से नामित दूरस्थ URL URL प्रिंट करें:

git remote -v | grep fetch | awk '{print $2}'

6

यदि आपको किसी शाखा के लिए अपस्ट्रीम रिमोट का नाम नहीं पता है, तो आप अपस्ट्रीम शाखा के नाम का निरीक्षण करके यह देख सकते हैं कि वर्तमान शाखा का निर्माण किया गया था। git rev-parseइस तरह का उपयोग करें:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream}

इससे पता चलता है कि अपस्ट्रीम शाखा वर्तमान शाखा के लिए स्रोत थी। इस तरह दूरस्थ नाम प्राप्त करने के लिए इसे पार्स किया जा सकता है:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1

अब इसे लें और इसे पाइप करें git ls-remoteऔर आपको अपस्ट्रीम रिमोट का यूआरएल मिलेगा जो वर्तमान शाखा का स्रोत है:

git ls-remote --get-url \
  $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1)

अब यह ध्यान दिया जाना चाहिए, कि यह जरूरी नहीं कि स्रोत रिमोट रिपॉजिटरी है जो कि क्लोन किया गया था। हालांकि कई मामलों में यह पर्याप्त होगा।


5
#!/bin/bash

git-remote-url() {
 local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; }
 local url

 if ! git config --get remote.${rmt}.url &>/dev/null; then
  printf "%s\n" "Error: not a valid remote name" && return 1
  # Verify remote using 'git remote -v' command
 fi

 url=`git config --get remote.${rmt}.url`

 # Parse remote if local clone used SSH checkout
 [[ "$url" == git@* ]] \
 && { url="https://github.com/${url##*:}" >&2; }; \
 { url="${url%%.git}" >&2; };

 printf "%s\n" "$url"
}

उपयोग:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Create a local clone of your repo with SSH, or HTTPS
git clone git@github.com:your-username/your-repository.git
cd your-repository

git-remote-url origin

आउटपुट:

https://github.com/your-username/your-repository

5

मुझे यह पसंद है क्योंकि यह याद रखना आसान है:

git config -l

यह सभी उपयोगी जानकारी को सूचीबद्ध करेगा जैसे:

user.name=Your Name
user.email=your.name@notexisting.com
core.autocrlf=input
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/mapstruct/mapstruct-examples
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

1

आसान बस इस आदेश का उपयोग करें जहाँ आप .it फ़ोल्डर रखा है

git config --get remote.origin.url

यदि आप नेटवर्क से जुड़े हैं

git remote show origin

यह आपको URL दिखाएगा कि एक स्थानीय गिट रिपॉजिटरी को मूल रूप से क्लोन किया गया था।

उममीद है कि इससे मदद मिलेगी

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