一部のGitリポジトリでGitリポジトリの名前を取得するにはどうすればよいですか?


144

いくつかのGitディレクトリで作業しているときに、一部のGitリポジトリでGitリポジトリ名を取得するにはどうすればよいですか?Gitコマンドはありますか?

# 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/…–
Max Sherman

いいえ、それはおそらく彼が望んでいることではありません。これはかかわらず、次のようになります。stackoverflow.com/questions/957928/...
Nevik Rehnel

node.jsを使用する場合は、npmjs.com
package /

回答:


153

さて、もしリポジトリ名がGitルートディレクトリ名(.gitディレクトリを含むもの)を意味するなら、これを実行できます:

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

このgit rev-parse --show-toplevel部分は、そのディレクトリへのパスを提供し、パスbasenameの最初の部分を取り除きます。


9
@mvpが以下に述べるように、.gitサブディレクトリを含むディレクトリの名前を変更できるため、「リポジトリ名の場合、gitルートディレクトリ名を意味する」とは限りません。
シャック2014

7
このコマンドは、まさにそれを提供します:.git dirのすぐ上のディレクトリの名前。これは「リポジトリの名前」の解釈の1つであり、OPが探していたもののようです。明らかに、リモートの起点リポジトリの名前のような他の有効な解釈があります。この場合には普遍的な真実はなく、それは本当にあなたが望むものに依存します。
Fuad Saud

1
ディレクトリが「Project 1.1」のように見える場合、Windows 8.1では機能しません。「Project」だけをエコーし​​ます。さらに、ここでのフォルダー名は、私のリポジトリ名に必ずしも関連しているわけではありませんよね?
Buttle Butkus、2015年

追加の質問:これを次のようにチェーン行の文字列に追加するには:git remote add test "admin @ sed -n '1 p' test.ip | basename basename` git rev-parse --show-toplevel:/ var / www "?? おそらく、見ての通り、この行は、 `` ``内を使用しての作業の原因はありません
fearis

1
これは安全ではありません。cd / var / www / htmlを実行するgit --git-dir=<some git repo>/.git rev-parse --show-toplevelと、/ var / www / html が返されます
sibaz

126

通常、これはできません。Gitはgitリポジトリの名前を気にしません。たとえば、リポジトリを含む.gitディレクトリ(サブディレクトリがあるディレクトリ)の名前を変更すると、gitはそれを認識しません-すべてが引き続き機能します。

ただし、クローンを作成した場合は、次のコマンドを使用できます。

git remote show origin

リポジトリのクローン元である元のリモートに関する多くの情報を表示するには、元のクローンURLが含まれます。

ただし、を使用して元のリモートへのリンクを削除したgit remote rm origin場合、またはを使用してそのリポジトリを作成した場合git init、そのような情報を取得することは単に不可能であり、どこにも存在しません。


2
git branch:) を使用すると、いつでもブランチ名を取得できます(アクティブなブランチは、スターでマークされます*)。
mvp 2014年

95

名前を取得するためにリポジトリにアクセスする必要はありません。また、フォルダ名は必ずしもリモート名を反映しているとは限りません。

これが、現在のリポジトリ名を取得する最も正確で効率的な方法であることがわかりました。

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

これはGit 1.8.1.5以降で機能するはずです。これ以前は、現在非推奨のgit-repo-configコマンドが機能していました(Git 1.7.5まで)。


4
これは最も明確な答えです(以前は$ {PWD ## * /}を使用していましたが、現在のフォルダ名が元のフォルダ名と異なる場合があります)
Vincent De Smet

はい、私はこれを探していました、とても感謝しています!私のフォルダ名は異なりました;)
csomakk

この1も動作します: basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)
fjammes

28

git v2.7.0の+、サブコマンドはget-urlに導入されたgit-remoteコマンド。

POSIXシェル:

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]
マックスCascone

あなたはジェンキンスでこれを使用することが起こる場合は、あなたが末尾の改行を取り除くしたいと思うtrim()def repo = powershell(returnStdout: true, script: "(git remote get-url origin | Split-Path -leaf).split('.')[0]" ).trim()
マックスCascone

17

ディレクトリの名前がリモートリポジトリの名前に対応していない場合、他の回答はまだ機能しません(可能性があります)。リポジトリの実際の名前は次のようにして取得できます。

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

基本的には、を呼び出してgit remote show origin、「Fetch URL:」フィールドからリポジトリURLを取得し、それを正規表現して、名前がhttps://github.com/dragn/ neat-vimrc .gitの部分を取得し ます。


1
ええ、これは大丈夫ですが、これはリモートに更新を問い合わせます。それgit remote show origin -nを防ぐために使用することをお勧めします。
2015年

1
元のURLが.gitで終わっていないときにも動作するようにsedコマンドを更新できますか?「foo.git」は「foo」になりますが、「foo」も一致しますか?私たちは貪欲でないマッチングが必要だと思いますか?
Arnout Engelen

@ArnoutEngelen最も簡単なことは、(オプションで).gitへの別の呼び出しでストリップすることだと思いsedます。答えのコードを更新しました。これにより、URLがで終わっていない場合に機能します.git
15年

理にかなっています!いいね!
Arnout Engelen

7
これsedは私のMac OSXでより簡単に機能しました:git remote show origin -n | grep h.URL | sed 's/.*://;s/.git$//'
MarkHu

6

ユーザー名または組織名とプロジェクトまたはリポジトリ名をgithubで取得しようとしている場合、少なくともローカルで機能するこのコマンドを作成できました。

 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
実際にはより強い条件であり、解析が少なくて済みます。プロジェクト名の代わりにURL名を指定する必要があるかもしれませんが、支払うには少額です。リポジトリ名に ".git"が含まれていると、他のすべての人のやり方が壊れてしまいます。可能性は低いですが、可能です。
シェーンJ

1
:あなた@ShaneJしている権利とあなたは「.git」リモート原点レポ名で処理し、私自身の答え書くために私を促したstackoverflow.com/a/58843794/2696867
animatedgif

5

この質問には少し遅れますが、次の場合:

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

reponameを含むリポジトリのURLが表示されます。

[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)"

質問の中で、gipcompanyは、ディレクトリ階層のどこかにあると述べています。彼が実際に何を望んでいるのかはわかりませんが(例があります- 「Gitリポジトリ内のどこからでもGitリポジトリ名を取得するかもしれません(これはgitリポジトリのイメージとは矛盾します))。 / URLは既知である必要があります。
greybeard

1

を使用したこのアプローチはgit-remote、HTTPSリモートではうまく機能しました。

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


1

リポジトリ名を表示するbash関数を次に示します(適切に設定されている場合)。

__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にはそのようなコマンドが組み込まれていないようです。しかし、Gitエイリアスとシェルマジックを使用して、自分で簡単に追加できます。

この回答で指摘されているように、を使用git rev-parse --show-toplevelして、現在のGitフォルダーのルートを表示できます。

これを定期的に使用する場合は、エイリアスとして定義する方が便利です。このために使用されgit config alias.root '!echo "$(git rev-parse --show-toplevel)"'ます。この後、を使用git rootして、現在使用しているリポジトリのルートフォルダを表示できます。

以外のサブコマンド名を使用する場合は、上記のコマンドのroot2番目の部分alias.rootを任意の名前に置き換えてください。

Gitのエイリアスの詳細については、git configmanページも参照してください


2
git config --add alias.root 'rev-parse --show-toplevel'-単一コマンドエイリアスのシェルをスローする必要はありません。
kostix 2013年

1

GitHubリポジトリ全体の名前( 'フルネーム')-ユーザー/リポジトリが必要で、Rubyでそれを実行したい場合...

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

他のものに勝るものはありませんが、私はそれをbash関数にしたので、それがオリジンでない場合はリモート名をドロップできます。

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

これはgit-2.18.2でかなりうまく動作し、gitターゲットリポジトリの外部から起動できます。

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


-1

使用できます:git remote -v

ドキュメント:https : //git-scm.com/docs/git-remote

ブランチを追跡するリポジトリ(「リモート」)のセットを管理します。-v --verboseもう少し冗長にして、名前の後にリモートURLを表示します。注:これは、リモートとサブコマンドの間に配置する必要があります。


1
git remote -v1つ以上のURLを返すだけです。これはどのように質問に答えますか?
Peter Mortensen、

先に述べたように、これはURLだけを返します...そして、URLの前に不要な文字を含む、改行で区切られた2つのURLを返します。SOは不要な情報を含めることで問題を作成し、検索する2つのパスを提示しますが、それでもリポジトリの名前を取得しません。
Andrew
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.