일부 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-remote
HTTPS 원격에서 잘 작동했습니다.
$ 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
'programing' 카테고리의 다른 글
엔티티 프레임워크 코어 - 테이크(1), 싱글(), 퍼스트()...Oracle 공급자와 함께 작동하지 않음(ORA-00933: SQL 명령이 제대로 종료되지 않음) (0) | 2023.07.09 |
---|---|
루비는 string.starts with("abc") 메서드가 내장되어 있습니까? (0) | 2023.07.09 |
1D 배열을 2D 배열로 변환(numpy) (0) | 2023.07.09 |
Apache POI 3.6을 사용하여 Excel 시트에서 255개 이상의 열을 얻는 방법 (0) | 2023.07.09 |
SpringBootTest의 @DataJpaTest에서 구성 클래스를 가져오려면 어떻게 해야 합니까? (0) | 2023.07.09 |