Как вам имя репозитория 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
12 ответов:
Ну, если для имени репозитория вы имеете в виду имя корневого каталога Git (тот, который содержит .каталог ЖКТ) можно выполнить следующим образом:
basename `git rev-parse --show-toplevel`The
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).
другие ответы по-прежнему не будут работать, когда имя вашего каталога не соответствует имени удаленного репозитория (и это может быть). Вы можете получить реальные имя репозитория с чем-то вроде этого:
git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$##" | sed "s#.git$##"в основном, вы звоните
git remote show origin, возьмите URL репозитория из поля" Fetch URL: "и регулярное выражение его, чтобы получить часть с именем: https://github.com/dragn/neat-vimrc. git
Я думаю, что это лучший способ, чтобы однозначно идентифицировать клон репозитория.
git config --get remote.origin.urlи проверка, чтобы убедиться, что происхождение соответствуетssh://your/repo.
вот функция 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каталог репозитория currrent. Он хранит путь в$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!"сообщите пользователю, что РЕПО было безымянным.
нечто подобное реализовано в этот скрипт.
к сожалению, кажется, что у Git нет такой встроенной команды. Но вы можете легко добавить его самостоятельно с помощью псевдонимов Git и некоторой магии оболочки.
как указал ответ, вы можете использовать
git rev-parse --show-toplevelчтобы показать корень текущей папки Git.если вы хотите использовать это регулярно, вероятно, удобнее определить его как псевдоним. Для этого используется
git config alias.root '!echo "$(git rev-parse --show-toplevel)"'. После этого, вы можете использоватьgit rootчтобы увидеть корневую папку репозитория, в котором вы находитесь в настоящее время.если вы хотите использовать другое имя подкоманды, чем
root, просто замените вторую частьalias.rootв приведенной выше команде, что вы хотите.для получения дополнительной информации о псевдонимах в Git см. также
git configна странице.
Если вы хотите, чтобы все имя репозитория GitHub ('полное имя') - пользователь/репозиторий, и вы хотите сделать это с помощью Ruby...
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'
на git v2.7. 0+, подкоманды
get-urlбыла представлена .POSIX:
basename (git remote get-url origin)PowerShell:
Split-Path -Leaf (git remote get-url origin)
этот подход с помощью
git-remoteхорошо работал для меня для HTTPS пультов:$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*//' | | | | | | | +---------------+ | | | Extract capture | | +--------------------+-----+ |Repository name capture| +-----------------------+пример
вот мой:
git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1не лучше, чем другие, но я сделал его функцией bash, чтобы я мог удалить удаленное имя, если это не origin.
grurl () { xx_remote= [ -z "$xx_remote" ] && xx_remote=origin git remote --verbose | grep "" | grep fetch | cut -f2 | cut -d' ' -f1 unset xx_remote }
вы можете использовать: git remote-v
документация: https://git-scm.com/docs/git-remote
управление набором репозиториев ("пультов"), ветви которых вы отслеживаете. -в -- подробный быть немного более подробным и показать удаленный url после имени. Примечание: это должно быть помещено между удаленным и подкомандой.
Comments