Ketika Anda bekerja di beberapa direktori Git, bagaimana Anda bisa mendapatkan nama repositori Git di beberapa repositori Git? Apakah ada perintah 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
repository
perusahaan gip
sumber
sumber
Jawaban:
Nah, jika, untuk nama repositori yang Anda maksud adalah nama direktori root Git (yang berisi direktori .git) Anda dapat menjalankan ini:
Bagian
git rev-parse --show-toplevel
memberi Anda jalan ke direktori itu danbasename
strip bagian pertama jalan.sumber
.git
subdirektori, jadi tidak benar bahwa "jika, untuk nama repositori yang Anda maksud adalah nama direktori root git".sed -n '1 p' test.ip | basename
basename`git rev-parse --show-toplevel
: / var / www "?? Karena Anda mungkin melihat baris ini tidak akan berfungsi karena menggunakan `` di dalam ``git --git-dir=<some git repo>/.git rev-parse --show-toplevel
dan itu akan mengembalikan Anda / var / www / htmlSecara umum, Anda tidak dapat melakukan ini. Git tidak peduli bagaimana repositori git Anda dinamai. Sebagai contoh, Anda dapat mengganti nama direktori yang berisi repositori Anda (satu dengan
.git
subdirektori), dan git bahkan tidak akan menyadarinya - semuanya akan terus berfungsi.Namun, jika Anda mengkloningnya, Anda dapat menggunakan perintah:
untuk menampilkan banyak informasi tentang remote asli tempat Anda mengkloning repositori Anda, dan itu akan berisi URL klon asli.
Namun, jika Anda menghapus tautan ke remote menggunakan asli
git remote rm origin
, atau jika Anda membuat repositori menggunakangit init
, informasi seperti itu tidak mungkin diperoleh - itu tidak ada di mana pun.sumber
git branch
:) (cabang aktif akan ditandai dengan bintang*
).Tidak perlu menghubungi repositori untuk mendapatkan nama, dan nama folder tidak harus mencerminkan nama jarak jauh.
Saya menemukan ini sebagai cara yang paling akurat dan efisien untuk mendapatkan nama repositori saat ini:
Ini seharusnya bekerja pada Git 1.8.1.5. Sebelum ini, perintah yang sekarang sudah usang
git-repo-config
akan bekerja (sedini Git 1.7.5).sumber
basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)
Di git v2.7.0 + , sebuah sub
get-url
-git-remote
perintah diperkenalkan ke perintah.Shell POSIX:
PowerShell:
sumber
.git
di akhir string saya menggunakan metode ini, jadi saya menambahkan split untuk melepasnya:(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()
Jawaban lain masih tidak akan berfungsi ketika nama direktori Anda tidak sesuai dengan nama repositori jarak jauh (dan itu bisa). Anda bisa mendapatkan nyata nama repositori dengan sesuatu seperti ini:
git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"
Pada dasarnya, Anda menelepon
git remote show origin
, ambil URL repositori dari bidang "Ambil URL:", dan regex untuk mendapatkan bagian dengan nama: https://github.com/dragn/ neat-vimrc .gitsumber
git remote show origin -n
untuk mencegah hal itu..git
panggilan lainsed
, saya telah memperbarui kode dalam jawabannya. Dengan cara ini ia akan berfungsi, ketika URL tidak diakhiri dengan.git
.sed
bekerja lebih baik di Mac OSX saya:git remote show origin -n | grep h.URL | sed 's/.*://;s/.git$//'
Jika Anda mencoba mendapatkan nama pengguna atau nama organisasi DAN proyek atau nama repo di github, saya dapat menulis perintah ini yang paling tidak berfungsi untuk saya secara lokal.
Ini adalah hasil yang diinginkan seperti
Vydia
nama organisasi dangourami
nama paket. Gabungan mereka dapat membantu membentukUser/Repo
jalur lengkapsumber
Saya pikir ini adalah cara yang lebih baik untuk secara jelas mengidentifikasi klon repositori.
git config --get remote.origin.url
dan memeriksa untuk memastikan bahwa asal cocokssh://your/repo
.sumber
Sedikit terlambat untuk pertanyaan ini, tetapi jika Anda:
Anda akan melihat url repositori yang akan menyertakan reponame:
sumber
Repo nama lengkap:
sumber
Penggunaan pendekatan ini
git-remote
bekerja dengan baik bagi saya untuk remote HTTPS:Contoh
sumber
Berikut adalah fungsi bash yang akan mencetak nama repositori (jika sudah diatur dengan benar):
Penjelasan:
Ini dijalankan
git rev-parse --git-dir
, yang mencetak path lengkap ke.git
direktori repositori currrent. Ini menyimpan jalan di$gitdir
.Ini dijalankan
cat ${gitdir}/description
, yang mencetak isi dari.git/description
repositori Anda saat ini. Jika Anda telah menamakan repositori dengan benar, itu akan mencetak nama. Kalau tidak, itu akan mencetakUnnamed repository; edit this file 'description' to name the repository.
Jika repo itu dinamai dengan benar, maka cetak isinya.
Jika tidak...
Beri tahu pengguna bahwa repo tidak bernama.
Hal serupa diterapkan dalam skrip ini .
sumber
Sayangnya, tampaknya Git tidak memiliki perintah seperti itu. Tetapi Anda dapat dengan mudah menambahkannya sendiri dengan alias Git dan beberapa shell magic.
Seperti yang ditunjukkan oleh jawaban ini , Anda dapat menggunakan
git rev-parse --show-toplevel
untuk menunjukkan root dari folder Git Anda saat ini.Jika Anda ingin menggunakan ini secara teratur, mungkin lebih mudah untuk mendefinisikannya sebagai alias. Untuk ini, digunakan
git config alias.root '!echo "$(git rev-parse --show-toplevel)"'
. Setelah ini, Anda dapat menggunakangit root
untuk melihat folder root dari repositori yang sedang Anda masuki.Jika Anda ingin menggunakan nama perintah lain selain
root
, cukup ganti bagian kedua darialias.root
perintah di atas dengan apa pun yang Anda inginkan.Untuk detail tentang alias di Git, lihat juga
git config
halaman manual .sumber
git config --add alias.root 'rev-parse --show-toplevel'
- tidak perlu membuang shell untuk alias perintah tunggal.Jika Anda ingin seluruh nama repositori GitHub ('nama lengkap') - pengguna / repositori, dan Anda ingin melakukannya dengan Ruby ...
sumber
Ini milik saya:
tidak lebih baik dari yang lain, tapi saya membuatnya menjadi fungsi bash sehingga saya bisa memasukkan nama jarak jauh jika bukan asal.
sumber
Juga saya hanya menemukan bahwa ada beberapa informasi repo di dalam
.git
direktori. Jadi Anda bisa menontonFETCH_HEAD
file di terminal untuk melihat nama repo:Contoh:
Keluaran:
Dan
https://bitbucket.org/somebituser/some_repo.git
adalah nama repositori Andasumber
Yang ini bekerja cukup baik dengan git-2.18.2 dan dapat diluncurkan dari repositori target git luar:
basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)
sumber
Anda dapat menggunakan: git remote -v
Dokumentasi: https://git-scm.com/docs/git-remote
sumber
git remote -v
hanya mengembalikan satu atau lebih URL. Bagaimana ini menjawab pertanyaan?