programing

일부 Git 저장소에서 Git 저장소의 이름을 어떻게 얻습니까?

css3 2023. 7. 9. 12:35

일부 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

Git에서는 저장소 이름의 개념이 없습니다.저장소 자체는 파일 시스템의 디렉토리(파일 시스템을 포함하는 디렉토리) 아래에 보관됩니다..git다음 명령을 사용하여 해당 디렉터리의 이름을 얻을 수 있습니다.

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

git rev-parse --show-toplevel파트는 해당 디렉토리에 대한 경로를 제공합니다.basename경로의 첫 번째 부분을 제거합니다.


Git's 저장소 이름에 대한 또 다른 일반적인 해석은 Git 호스팅 서비스(GitHub 또는 GitLab 등)에서 저장소를 식별하는 데 사용되는 이름입니다.이 이름은 원격 정보와 이 질문에 대한 다른 답변에 나와 있는 몇 가지 다른 방법을 통해 얻을 수 있습니다.

일반적으로 이 작업을 수행할 수 없습니다.Git는 Git 저장소의 이름이 어떻게 지정되는지 신경쓰지 않습니다.를 들어,할 수 ..git하위 디렉터리), 그리고 git는 그것을 알아차리지도 못할 것입니다. - 모든 것이 계속 작동할 것입니다.

그러나 복제한 경우 다음 명령을 사용할 수 있습니다.

git remote show origin

저장소를 복제한 원본 원격에 대한 많은 정보를 표시하고 원본 복제 URL을 포함합니다.

그나다사음용여원하래원격경대한제우링거한크를에러을▁remote경을 사용하여 원래 한 경우git remote rm origin 또를사해여당만경든우를리리토를 사용하여 git init그러한 정보는 단순히 얻기가 불가능합니다 - 그것은 어디에도 존재하지 않습니다.

이름을 가져오기 위해 리포지토리에 연결할 필요가 없으며 폴더 이름이 원격 이름을 반드시 반영하지는 않습니다.

현재 리포지토리 이름을 가져오는 가장 정확하고 효율적인 방법은 다음과 같습니다.

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

1되지 않는 Git 1.8.1.5를 사용했습니다.git-repo-config명령은 작동했을 것입니다(Git 1.7.5 이전).

Ingit v2.7.0+, 하위 명령get-url되었습니다.git-remote지휘권

POSIX 셸:

basename $(git remote get-url origin)

PowerShell:

Split-Path -Leaf (git remote get-url origin)

만약 당신이 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

디렉터리 이름이 원격 리포지토리 이름과 일치하지 않는 경우에도 다른 대답이 작동하지 않습니다.다음과 같은 방법으로 저장소의 실제 이름을 얻을 수 있습니다.

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

기본적으로, 당신은 전화를 합니다.git remote show origin"Fetch URL:" 필드에서 저장소 URL을 가져온 다음 regex를 사용하여 이름이 https://github.com/dragn/neat-vimrc.git 인 부분을 가져옵니다.

이 질문에 조금 늦었지만, 만약 당신이:

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

이렇게 하면 리포지토리의 복제본을 명확하게 식별할 수 있는 더 좋은 방법이라고 생각합니다.

git config --get remote.origin.url그리고 출처가 일치하는지 확인합니다.ssh://your/repo.

전체 이름 재포:

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

전체 GitHub 저장소 이름('전체 이름') - 사용자/리포지토리를 원하며 Ruby로 수행하려면...

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

이 접근 방식은 다음을 사용합니다.git-remoteHTTPS 원격에서 잘 작동했습니다.

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

저장소 이름을 인쇄하는 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사용자의 현재 리포지토리입니다.리포지토리의 이름을 올바르게 지정한 경우 이름이 인쇄됩니다.▁print▁will니▁otherwise됩▁it인이 인쇄됩니다.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현재 있는 리포지토리의 루트 폴더를 확인합니다.

▁than▁sub경▁name우▁another▁if▁you는▁want려▁to▁use가 아닌 다른 하위 명령어 이름을 사용하려는 경우root의 두 번째 부분을 간단히 대체합니다.alias.root당신이 원하는 것과 함께 위의 명령으로.

Git의 별칭에 대한 자세한 내용은 man 페이지를 참조하십시오.

이것은 git-2.18.2와 잘 작동하며 외부 git 대상 저장소에서 실행할 수 있습니다.

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

git ls-remote --get-url | xargs basename -s .git # bar

# zsh
git ls-remote --get-url | read
print $REPLY:t:r # bar

내 것은 다음과 같습니다.

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
}

또한 저는 단지 안에 몇 가지 레포 정보가 있다는 것을 발견했습니다..git디렉토리입니다. 까그니보됩니다면그냥러▁watch▁just를 볼 수 있습니다.FETCH_HEAD터미널에 있는 파일에서 repo의 이름을 확인합니다.

예:

cd your_project_folder/.git
more FETCH_HEAD

출력:

672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

그리고.https://bitbucket.org/somebituser/some_repo.git의 이름입니다.

Git 객체 데이터베이스의 객체에 프로젝트 이름을 저장하고 주석이 달린 태그에서 참조할 수 있습니다.

예를 들어 저장소 이름 "GnuMake"는 태그 이름 "nameRepo"입니다. ssh -F는 원격 호스트로 등록된 SSH 구성 파일 khnSrv_al을 지정합니다.

명령: git 데이터베이스에 개체를 만들어 배치하고, 배치된 개체에 대한 링크를 가져와 주석이 달린 태그에 저장합니다.

git -C /path/dir_git -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' $(echo 'GnuMake'|git -C /path/dir_git hash-object -w --stdin)

al@rznCad:~$ git -C ~/experiments/git -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' $(echo 'GnuMake'|git -C ~/experiments/git hash-object -w --stdin)

al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al "git -C /home/al/newRepos/GNU_Make -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' \$(echo 'GnuMake'|git -C /home/al/newRepos/GNU_Make hash-object -w --stdin)"

명령: "nameRepo"라는 태그를 사용하여 git 데이터베이스 개체에서 리포지토리 이름을 추출합니다.

git -C /path/dir_git cat-file blob nameRepo

al@rznCad:~$ git -C ~/experiments/git cat-file blob nameRepo
=>GnuMake

al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al "git -C /home/al/newRepos/GNU_Make cat-file blob nameRepo"
=>GnuMake

al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al git -C /home/al/newRepos/GNU_Make show nameRepo
tag nameRepo
Tagger: ВашеИмя <you@example.com>
Date:   Wed Jan 25 09:01:18 2023 +0200

Имя репозитория
GnuMake

리포지토리에 이 이외의 다른 항목이 있을 필요는 없으며 언제든지 리포지토리 이름을 만들 수 있습니다.

사용할 수 있습니다. git remote -v

설명서: https://git-scm.com/docs/git-remote

분기를 추적하는 리포지토리("원격") 집합을 관리합니다. -v --verbose 조금 더 자세히 설명하고 이름 뒤에 원격 URL을 표시합니다.참고: 원격 명령과 하위 명령 사이에 배치해야 합니다.

언급URL : https://stackoverflow.com/questions/15715825/how-do-you-get-the-git-repositorys-name-in-some-git-repository