web-dev-qa-db-ja.com

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

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
100
gipcompany

リポジトリ名にGitルートディレクトリ名(.gitディレクトリを含む名前)を意味する場合、これを実行できます。

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

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

113
Fuad Saud

一般に、これを行うことはできません。 Gitは、gitリポジトリの名前を気にしません。たとえば、リポジトリ(.gitサブディレクトリを持つディレクトリ)を含むディレクトリの名前を変更すると、gitはそれに気付かないこともあります。すべては引き続き機能します。

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

git remote show Origin

リポジトリを複製した元のリモートに関する多くの情報を表示するために、元のクローンURLが含まれます。

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

101
mvp

名前を取得するためにリポジトリに連絡する必要はなく、フォルダ名は必ずしもリモート名を反映しません。

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

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

これはGit 1.8.1.5以降で機能するはずです。これ以前は、廃止されたgit-repo-configコマンドは機能していました(Git 1.7.5で)。

51
TastyWheat

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

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

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

18
dragn

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

POSIXシェル:

basename $(git remote get-url Origin)

パワーシェル:

Split-Path -Leaf (git remote get-url Origin)
17
vulcan raven

これはクローンを明確に識別するリポジトリのより良い方法だと思います。

git config --get remote.Origin.urlおよびOriginがssh://your/repoと一致することを確認するためのチェック。

5
OLIVER.KOO

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

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

リポジトリ名が含まれるリポジトリの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
3
jonnyjandles

GitHubリポジトリ名全体(「フルネーム」)が必要な場合-ユーザー/リポジトリで、Rubyで実行したい場合...

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

残念ながら、Gitにはそのようなコマンドが組み込まれていないようです。しかし、Gitエイリアスといくつかのシェルマジックを使用して、自分で簡単に追加できます。

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

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

root以外のサブコマンド名を使用する場合は、上記のコマンドのalias.rootの2番目の部分を必要なものに置き換えるだけです。

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

1
Nevik Rehnel

リポジトリ名を出力する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
MD XF

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

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

0
whirlwin

これが私のものです:

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

他のものよりはましではありませんが、Originでない場合はリモート名をドロップできるように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
tamouse

使用できます:git remote -v

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

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

0
David

また、.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
fonjeekay

リポジトリのフルネーム:

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