কিছু গিট সংগ্রহস্থলে আপনি কীভাবে গিট সংগ্রহস্থলের নাম পাবেন?


144

আপনি যখন কিছু গিট ডিরেক্টরিতে কাজ করছেন, আপনি কিছু গিট সংগ্রহস্থলের মধ্যে কীভাবে গিট সংগ্রহস্থলের নাম পেতে পারেন? কোন গিট কমান্ড আছে?

# I did check out bar repository and working in somewhere 
# under bar directory at this moment such as below.

$ git clone git://github.com/foo/bar.git
$ cd bar/baz/qux/quux/corge/grault # and I am working in here!
$ git xxx # <- ???
bar

দেখে মনে হচ্ছে এটি আপনি যা করছেন। stackoverflow.com/questions/4076239/…
ম্যাক্স শেরম্যান

না, সম্ভবত তিনি যা চান তা নয়। এই হতে পারে যদিও: stackoverflow.com/questions/957928/...
Nevik Rehnel

আপনি যদি নোড.জেএস
jonschlinkert

উত্তর:


153

ঠিক আছে, যদি, সংগ্রহস্থল নামের জন্য আপনি গিট রুট ডিরেক্টরি নামটি বোঝাতে চান (যার মধ্যে একটি .git ডিরেক্টরি রয়েছে) আপনি এটি চালাতে পারেন:

basename `git rev-parse --show-toplevel`

git rev-parse --show-toplevelঅংশ আপনি যে ডিরেক্টরির পাথ দেয় এবং basenameপথ প্রথম অংশ রেখাচিত্রমালা।


9
যেমন @ এমভিপি নীচে বলেছে, আপনি .gitসাব- ডিরেক্টরি অন্তর্ভুক্ত ডিরেক্টরিটির নাম পরিবর্তন করতে পারেন , সুতরাং এটি সত্য নয় যে "যদি, সংগ্রহস্থলের নামের জন্য আপনি গিট রুট ডিরেক্টরি নামটি বোঝায়"।
শিখ

7
এই কমান্ডটি আপনাকে হুবহু এটি দেয়: ডিরেক্টরিটির নাম সরাসরি .git dir এর উপরে। এটি "ভাণ্ডারের নাম" এর জন্য একটি ব্যাখ্যা, এবং মনে হয় এটিই ওপি খুঁজছিল। স্পষ্টতই অন্যান্য বৈধ ব্যাখ্যা রয়েছে যেমন রিমোট অরিজিনের সংগ্রহস্থলের নাম। এই ক্ষেত্রে কোনও সর্বজনীন সত্য নেই এবং এটি আপনি যা চান তার উপর নির্ভর করে really
ফুয়াদ সৌদ

1
উইন্ডোজ 8.1 এ কাজ করে না যখন আমার ডিরেক্টরিটি "প্রকল্প 1.1" এর মতো দেখায়। এটি কেবল "প্রকল্প" প্রতিধ্বনিত করে। এখানে ফোল্ডারের নামটি অগত্যা আমার রেপো নামের সাথে সম্পর্কিত নয়, তাই না?
বাটাল বুটকাস

অতিরিক্ত প্রশ্ন: এটি চেইন লাইনের স্ট্রিং হিসাবে কীভাবে যুক্ত করবেন: গিট রিমোট অ্যাড টেস্ট "অ্যাডমিন @ sed -n '1 p' test.ip | basename বেসনাম` git rev-parse --show-toplevel: / var / www "?? আপনি সম্ভবত দেখতে পাচ্ছেন যে এই লাইনটি `` ভিতরে `using ব্যবহারের কারণে কাজ করবে না
ভয় পেয়ে

1
এটি নিরাপদ নয় সিডি / ভার / www / এইচটিএমএল চেষ্টা করুন git --git-dir=<some git repo>/.git rev-parse --show-toplevelএবং এটি আপনাকে ফেরত দেবে /
ভেরি

126

সাধারণভাবে, আপনি এটি করতে পারবেন না। গিট কীভাবে আপনার গিট সংগ্রহস্থলের নামকরণ করে তা যত্ন করে না। উদাহরণস্বরূপ, আপনি আপনার ভাণ্ডার ( .gitডিরেক্টরিতে একটি ডিরেক্টরি) সম্বলিত ডিরেক্টরিটির পুনরায় নামকরণ করতে পারেন , এবং গিট এটিকে লক্ষ্য করবে না - সবকিছু কাজ চালিয়ে যাবে।

তবে আপনি যদি এটি ক্লোন করেন তবে আপনি কমান্ডটি ব্যবহার করতে পারেন:

git remote show origin

আসল রিমোট সম্পর্কে প্রচুর তথ্য প্রদর্শন করতে যা থেকে আপনি আপনার সংগ্রহশালা ক্লোন করেছেন এবং এতে মূল ক্লোন ইউআরএল থাকবে।

তবে, git remote rm originযদি আপনি ব্যবহার করে আসল রিমোটের লিঙ্কটি সরিয়ে ফেলেছেন বা যদি আপনি সেই রিপোজিটরি ব্যবহার করে তৈরি করেন তবে এই git initজাতীয় তথ্য প্রাপ্তি কেবল অসম্ভব - এটি কোথাও বিদ্যমান নেই।


2
আপনি সর্বদা ভাল ব্যবহার করে শাখার নাম পেতে পারেন, git branch:) (সক্রিয় শাখাটি তারা দিয়ে চিহ্নিত করা হবে *)।
এমভিপি

95

নামটি পাওয়ার জন্য ভান্ডারটির সাথে যোগাযোগের প্রয়োজন নেই এবং ফোল্ডারের নামটি অগত্যা দূরবর্তী নামটি প্রতিফলিত করবে না।

আমি এটি বর্তমান সংগ্রহস্থলের নাম পাওয়ার সবচেয়ে সঠিক এবং কার্যকর উপায় হিসাবে খুঁজে পেয়েছি:

basename -s .git `git config --get remote.origin.url`

এটি গিট 1.8.1.5 হিসাবে কাজ করবে। এর আগে, এখন অবহেলিত git-repo-configকমান্ডটি কাজ করবে (গিট 1.7.5 হিসাবে প্রথম দিকে)।


4
সম্মতি জানানো হয়েছে, এটি সবচেয়ে পরিষ্কার উত্তর (আমার কাছে {{পিডাব্লুডি ## * / have ছিল তবে আপনি যেমন বলেছেন, বর্তমান ফোল্ডারের নামটি উত্স থেকে আলাদা হতে পারে)
ভিনসেন্ট ডি স্মেট

হ্যাঁ, আমি এটি খুঁজছিলাম, অনেক প্রশংসা! আমার ফোল্ডারের নাম পৃথক;)
csomakk

এটির একটিও কাজ করে: basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)
fjammes

28

ইন Git v2.7.0 + + , একটি subcommand get-urlচালু ছিল git-remoteকমান্ড।

পসিক্স শেল:

basename $(git remote get-url origin)

শক্তির উৎস:

Split-Path -Leaf (git remote get-url origin)

আমি .gitএই পদ্ধতিটি ব্যবহার করে আমার স্ট্রিংয়ের শেষে পেয়েছি, তাই আমি এটি সরিয়ে (git remote get-url origin | Split-Path -leaf).split('.')[0]
ফেলার

আপনি যদি জেনকিনসে এটি ব্যবহার করছেন বলে মনে হয়, আপনি একটি সহ এই রেলপথটি শেষ করতে চান trim():def repo = powershell(returnStdout: true, script: "(git remote get-url origin | Split-Path -leaf).split('.')[0]" ).trim()
ম্যাক্স ক্যাসোন

17

আপনার ডিরেক্টরিটির নাম দূরবর্তী সংগ্রহস্থলের নামের সাথে মিলে না গেলে (এবং এটি হতে পারে) অন্যান্য উত্তরগুলি এখনও কাজ করবে না। এই জাতীয় কিছু দিয়ে আপনি সংগ্রহস্থলের আসল নামটি পেতে পারেন :

git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"

মূলত, আপনি কল করেন git remote show origin, "URL টি আনা:" ক্ষেত্রের থেকে সংগ্রহস্থলটি নিয়ে যান এবং অংশটি নাম সহ পেতে এটি পুনরায় সংগ্রহ করুন : https://github.com/dragn/ ঝরঝরে


1
হ্যাঁ, এটি ঠিক আছে তবে এটি আপডেটের জন্য দূরবর্তীটিকে জিজ্ঞাসা করবে। এটি git remote show origin -nপ্রতিরোধের জন্য ব্যবহার করা ভাল ।
রায়য়ান্ট

1
অরিজিনাল ইউআরএল .git এ শেষ না হলে আমরাও কাজ করার জন্য সেড কমান্ড আপডেট করতে পারি? সুতরাং 'foo.git' 'foo' হয়ে যায়, তবে 'foo'ও কি মিলছে? আমার ধারণা, আমাদের লোভী মিল নেই?
আর্নআট এঙ্গেলেন

@ আর্নআউটএঙ্গেলেন আমি মনে করি যে সবচেয়ে সহজ কাজটি হ'ল (allyচ্ছিকভাবে) .gitঅন্য কল দিয়ে ফালা ফেলা sed, আমি উত্তরে কোডটি আপডেট করেছি। এই ভাবে এটি কাজ করবে, যখন URL টি শেষ হবে না .git
ড্র্যাগ করুন

বোধ হয়! ভাল একটা!
আর্নআট এঙ্গেলেন

7
এই sedgit remote show origin -n | grep h.URL | sed 's/.*://;s/.git$//'
সহজটি

6

আপনি যদি ব্যবহারকারীর নাম বা সংস্থার নাম এবং প্রকল্প বা রেপো নামটি গিথুব নেওয়ার চেষ্টা করছেন তবে আমি এই কমান্ডটি লিখতে সক্ষম হয়েছি যা আমার পক্ষে কমপক্ষে স্থানীয়ভাবে কাজ করে।

 git config --get remote.origin.url
# => https://github.com/Vydia/gourami.git

 git config --get remote.origin.url | sed 's/.*\/\([^ ]*\/[^.]*\).*/\1/' # Capture last 2 path segments before the dot in .git
# => Vydia/gourami

এটি Vydiaপ্রতিষ্ঠানের নাম এবং gouramiপ্যাকেজের নাম হিসাবে এটি পছন্দসই ফলাফল । সংযুক্ত তারা সম্পূর্ণ User/Repoপথ তৈরিতে সহায়তা করতে পারে


5

আমি মনে করি এটি নির্বিঘ্নে কোনও ক্লোন সনাক্ত করার একটি ভাল উপায় কোনও সংগ্রহস্থলের ।

git config --get remote.origin.urlএবং আসলটি মেলে তা নিশ্চিত করার জন্য পরীক্ষা করা ssh://your/repo


1
প্রকৃতপক্ষে আরও শক্তিশালী অবস্থার জন্য কম পার্সিংয়ের প্রয়োজন। প্রকল্পের নামের পরিবর্তে ইউআরএল নাম নির্দিষ্ট করতে হবে, তবে অর্থের মূল্য দিতে হবে। অন্য সবাই যেভাবে এটি করছে তা ভাঙ্গতে পারে যদি ".git" রেপো নামটিতে ঘটে থাকে। অসম্ভব, তবে সম্ভব।
শেন জে

1
আপনি @ShaneJ ডান এবং আপনি আমাকে অনুরোধ জানানো আমার নিজের উত্তর যেটি ".git" দূরবর্তী উৎপত্তি রেপো নামে পরিচালনা লিখতে: stackoverflow.com/a/58843794/2696867
animatedgif

5

এই প্রশ্নের জন্য একটু দেরি হলেও আপনি যদি:

cat /path/to/repo/.git/config

আপনি সংগ্রহস্থলের ইউআরএল দেখতে পাবেন যার মধ্যে নামটি অন্তর্ভুক্ত থাকবে:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/your_git_user_name/your_git_repo_name.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

2

রেপুর পুরো নাম:

git config --get remote.origin.url | grep -Po "(?<=git@github\.com:)(.*?)(?=.git)"

প্রশ্নে, জিপকম্পানি ডিরেক্টরি শ্রেণিবদ্ধের গভীরতর কোথাও থাকার কথা উল্লেখ করেছে। যদিও তিনি নিশ্চিত যে তিনি আসলে কী চান (যদিও এর একটি উদাহরণ রয়েছে - " এই গিট সংগ্রহস্থলের যে কোনও জায়গা থেকে গিট সংগ্রহস্থলটির নাম পাওয়া যেতে পারে " (যা আমি গিট সংগ্রহস্থলগুলির কল্পনা করার সাথে বিরোধী)), আমি এরকম কোনও ইঙ্গিত দেখছি না যে / ইউআরএল জানা উচিত।
গ্রেইবার্ড

1

git-remoteএইচটিটিপিএস রিমোটগুলির জন্য আমার এই পদ্ধতির ব্যবহার ভাল করেছে:

$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/'
                                                |  |        | |
                                                |  |        | +---------------+
                                                |  |        | Extract capture |
                                                |  +--------------------+-----+
                                                |Repository name capture|
                                                +-----------------------+

উদাহরণ


1

এখানে একটি বাশ ফাংশন যা ভাণ্ডারটির নাম মুদ্রণ করবে (যদি এটি সঠিকভাবে সেট আপ করা থাকে):

__get_reponame ()
{
    local gitdir=$(git rev-parse --git-dir)

    if [ $(cat ${gitdir}/description) != "Unnamed repository; edit this file 'description' to name the repository." ]; then
        cat ${gitdir}/description
    else
        echo "Unnamed repository!"
    fi
}

ব্যাখ্যা:

local gitdir=$(git rev-parse --git-dir)

এটি কার্যকর করে git rev-parse --git-dir, যা .gitকারেন্ট রিপোজিটরির ডিরেক্টরিতে সম্পূর্ণ পথ প্রিন্ট করে । এটি ভিতরে পথ সঞ্চয় করে $gitdir

if [ $(cat ${gitdir}/description) != "..." ]; then

এটি কার্যকর করে cat ${gitdir}/description, যা .git/descriptionআপনার বর্তমান সংগ্রহস্থলের সামগ্রীগুলি মুদ্রণ করে । আপনি যদি সঠিকভাবে আপনার সংগ্রহস্থলের নাম রেখেছেন তবে এটি একটি নাম মুদ্রণ করবে। অন্যথায়, এটি মুদ্রণ করা হবেUnnamed repository; edit this file 'description' to name the repository.

cat ${gitdir}/description

যদি রেপো সঠিকভাবে নামকরণ করা হয়, তবে বিষয়বস্তু মুদ্রণ করুন।

else

তা না হলে ...

echo "Unnamed repository!"

ব্যবহারকারীকে বলুন যে রেপো নামবিহীন ছিল।


অনুরূপ কিছু এই স্ক্রিপ্টে প্রয়োগ করা হয়েছে ।


1

দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে গিটের তেমন কোনও কমান্ড নেই।

এই উত্তর দ্বারা নির্দেশিত হিসাবে , আপনি ব্যবহার করতে পারেনgit rev-parse --show-toplevel আপনার বর্তমান গিট ফোল্ডারটির মূল দেখানোর জন্য ।

আপনি যদি এটি নিয়মিত ব্যবহার করতে চান তবে এটি সম্ভবত একটি উপন্যাস হিসাবে সংজ্ঞায়িত করা আরও সুবিধাজনক। এই জন্য, ব্যবহৃত git config alias.root '!echo "$(git rev-parse --show-toplevel)"'। এর পরে, আপনি git rootবর্তমানে যে সংগ্রহস্থলটি করছেন তার মূল ফোল্ডারটি দেখতে আপনি এটি ব্যবহার করতে পারেন।

আপনি যদি অন্য সাবকম্যান্ড নামটি ব্যবহার করতে চান তবে উপরের কমান্ডের rootদ্বিতীয় অংশটি যা খুশি তাই প্রতিস্থাপন করুন alias.root

গিটের উপাধিকার সম্পর্কে বিস্তারিত জানতে git configম্যান পৃষ্ঠাটিও দেখুন


2
git config --add alias.root 'rev-parse --show-toplevel'- একটি একক কমান্ড ওরফে জন্য শেল নিক্ষেপ করার প্রয়োজন নেই।
kostix

1

আপনি যদি পুরো গিটহাব সংগ্রহস্থলীর নাম ('পুরো নাম') - ব্যবহারকারী / সংগ্রহস্থল চান এবং আপনি এটি রুবির সাথে করতে চান ...

git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'

0

এখানে আমার:

git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1

অন্যদের চেয়ে ভাল আর না, তবে আমি এটিকে বাশ ফাংশন হিসাবে তৈরি করেছি যাতে এটির উত্স না হলে আমি দূরবর্তী নামটিতে নামাতে পারি।

grurl () {
  xx_remote=$1
  [ -z "$xx_remote" ] && xx_remote=origin
  git remote --verbose | grep "$1" | grep fetch | cut -f2 | cut -d' ' -f1
  unset xx_remote
}

0

এছাড়াও আমি কেবল দেখতে পাই যে .gitডিরেক্টরিতে কিছু রেপো তথ্য রয়েছে । সুতরাং আপনি FETCH_HEADরেপোর নাম দেখতে কেবল টার্মিনালে ফাইল দেখতে পারেন:

উদাহরণ:

cd your_project_folder/.git
more FETCH_HEAD

আউটপুট:

672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

এবং https://bitbucket.org/somebituser/some_repo.gitএটি আপনার ভাণ্ডারের নাম


0

এটি গিট -২.১18.২ নিয়ে বেশ ভাল কাজ করে এবং বাইরে গিট টার্গেটের সংগ্রহস্থল থেকে চালু করা যেতে পারে:

basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)


-1

আপনি ব্যবহার করতে পারেন: গিট দূরবর্তী -v

ডকুমেন্টেশন: https://git-scm.com/docs/git-remote

যার শাখাগুলি আপনি ট্র্যাক করেন সেগুলি সংগ্রহস্থলের সেট ("রিমোট") পরিচালনা করুন। -v --verbose আরও কিছুটা ভার্বোজ হন এবং নামের পরে দূরবর্তী url দেখান। দ্রষ্টব্য: এটি অবশ্যই দূরবর্তী এবং সাবকম্যান্ডের মধ্যে স্থাপন করা উচিত।


1
git remote -vকেবল এক বা একাধিক ইউআরএল ফিরিয়ে দিচ্ছে। কিভাবে এই প্রশ্নের উত্তর দিচ্ছে?
পিটার মর্টেনসেন

যেমন আগেই বলা হয়েছে, এটি কেবল ইউআরএলগুলি ফেরত দেয় ... এবং এটি URL টির আগে অপ্রয়োজনীয় অক্ষরগুলি সহ একটি লাইন ব্রেক দ্বারা পৃথক করা 2 টি URL টি প্রদান করে returns সুতরাং এটি অপ্রয়োজনীয় তথ্য অন্তর্ভুক্ত করে একটি সমস্যা তৈরি করে, তারপরে অনুসন্ধানের জন্য দুটি পথ উপস্থাপন করে, তবে এটি এখনও রেপোর নাম পায় না।
অ্যান্ড্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.