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
リポジトリ名にGitルートディレクトリ名(.gitディレクトリを含む名前)を意味する場合、これを実行できます。
basename `git rev-parse --show-toplevel`
git rev-parse --show-toplevel
部分はそのディレクトリへのパスを提供し、basename
はパスの最初の部分を取り除きます。
一般に、これを行うことはできません。 Gitは、gitリポジトリの名前を気にしません。たとえば、リポジトリ(.git
サブディレクトリを持つディレクトリ)を含むディレクトリの名前を変更すると、gitはそれに気付かないこともあります。すべては引き続き機能します。
ただし、クローンを作成した場合は、次のコマンドを使用できます。
git remote show Origin
リポジトリを複製した元のリモートに関する多くの情報を表示するために、元のクローンURLが含まれます。
ただし、git remote rm Origin
を使用して元のリモートへのリンクを削除した場合、またはgit init
を使用してそのリポジトリを作成した場合、そのような情報を取得することは不可能です。
名前を取得するためにリポジトリに連絡する必要はなく、フォルダ名は必ずしもリモート名を反映しません。
現在のリポジトリ名を取得する最も正確で効率的な方法であることがわかりました。
basename -s .git `git config --get remote.Origin.url`
これはGit 1.8.1.5以降で機能するはずです。これ以前は、廃止されたgit-repo-config
コマンドは機能していました(Git 1.7.5で)。
ディレクトリの名前がリモートリポジトリ名に対応していない場合(および可能性がある場合)、他の回答はまだ機能しません。次のようなものを使用して、リポジトリの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
git v2.7.0 + では、get-url
コマンドにサブコマンドgit-remote
が導入されました。
POSIXシェル:
basename $(git remote get-url Origin)
パワーシェル:
Split-Path -Leaf (git remote get-url Origin)
これはクローンを明確に識別するリポジトリのより良い方法だと思います。
git config --get remote.Origin.url
およびOriginがssh://your/repo
と一致することを確認するためのチェック。
この質問には少し遅れましたが、次の場合:
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
GitHubリポジトリ名全体(「フルネーム」)が必要な場合-ユーザー/リポジトリで、Rubyで実行したい場合...
git remote show Origin -n | Ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'
残念ながら、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ページ も参照してください。
リポジトリ名を出力する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!"
リポジトリに名前が付けられていないことをユーザーに伝えます。
同様の何かが このスクリプト で実装されています。
HTTPSリモートでは、git-remote
を使用したこのアプローチがうまく機能しました。
$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/'
| | | |
| | | +---------------+
| | | Extract capture |
| +--------------------+-----+
|Repository name capture|
+-----------------------+
例
これが私のものです:
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
}
使用できます:git remote -v
ドキュメント: https://git-scm.com/docs/git-remote
ブランチを追跡するリポジトリ(「リモート」)のセットを管理します。 -v --verboseもう少し冗長にして、名前の後にリモートURLを表示します。注:これは、リモートコマンドとサブコマンドの間に配置する必要があります。
また、.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
はリポジトリの名前です
リポジトリのフルネーム:
git config --get remote.Origin.url | grep -Po "(?<=git@github\.com:)(.*?)(?=.git)"