내 컴퓨터의 모든 git 저장소를 어떻게 볼 수 있습니까?


121

내 컴퓨터에있는 모든 git 저장소를 볼 수있는 방법이 있습니까? 그것에 대한 명령이 있습니까?


2
git-summary를 참조하십시오 . 모든 저장소를 나열하고 상태 정보를 출력하는 bash 스크립트입니다. 면책 조항, 저는 개발자 중 한 명입니다.
cagliari2005

@ cagliari2005 : 베어 리포지토리는 어떻습니까? stackoverflow.com/questions/60064170/…
Luciano

답변:


102

당신이 리눅스에 있다면 find / -name ".git", 그렇지 않으면 방법이 없습니다. 그들은 표준 디렉토리입니다. OS 파일 / 폴더 찾기 프로그램을 사용하여 .git명명 된 폴더 를 찾으십시오 .


1
Windows (그리고 Mac에서도 마찬가지입니다)에서 유사한 작업을 수행 할 수 있습니다. .git이라는 디렉토리를 검색하면됩니다. git은 메타 정보를 저장하는 데 사용합니다.
cjstehno

3
Mac에서는 위의 명령도 작동합니다. (OS9 또는 이전 버전을 실행하지 않는 한!)
Alex Feinman

1
이 간단한 파일 검색 기능을 구현하고 저장소 상태 정보를 목록에 추가하는 좋은 셸 스크립트 나 작은 유틸리티 응용 프로그램이 있습니까? 그렇게하기 위해 쉘 스크립트를 작성하는 것이 문제가되어서는 안되며, 최적화되지 않은 내 해킹보다 잘 채택 된 스크립트를 사용하십시오.
jmlane

6
@jmlanefor d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
LJ VanKuiken

man 페이지에 해결책이 있습니다. 수락 된 답변과 비슷하지만 -prune을 사용하여 .git 디렉토리로 이동하지 않고 더 빨리 반환하십시오. 정리하지 않으면 .git 폴더로 이동하고 내용에 따라 불필요하게 내부를 검색하는 데 시간을 소비합니다. 매뉴얼 페이지 솔루션은 "find repo / (-exec test -d '{}'/. svn \; -or \ -exec test -d {} /. git \; -or -exec test -d {} / CVS \ ;) \ -print -prune 확인하고 필요하지 않은 경우 svn 및 cvs를 편집하십시오
quiet_penguin

38

원래 답변 : 이것은 Windows Powershell에서 매우 잘 작동합니다.

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse

편집 # 1 : -Filter는 -Include 보다 두 배 빠릅니다 . 그 해결책은 다음과 같습니다.

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse

편집 # 2 : Keith E. Truesdell 이 출력을 파일로 보내는 것을 언급했습니다. 해당 솔루션에 대한 그의 의견을 참조하십시오. 콘솔 출력을 선호합니다. 그러나 그의 의견은 기본적으로 반환되는 전체 경로가 아닌 전체 경로를 선호한다고 생각했습니다. 전체 경로 만 원하면 다음을 사용하십시오.

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }

최종 참고 : 위의 솔루션 은 현재 디렉토리 아래의 Git 저장소 만 반환합니다 . 드라이브의 모든 저장소를 원하면 각 드라이브의 루트에서 명령을 한 번 실행해야합니다.


1
Windows 사용자에게 매우 유용합니다! :)
Felix Feliciant

2
Get-ChildItem : 매개 변수 이름 'Attributes'와 일치하는 매개 변수를 찾을 수 없습니다. 줄에 : 1 개 문자 : 28
Dewald Swanepoel

@DewaldSwanepoel-Attributes 매개 변수에 대한 오류가 표시되는 이유를 모르겠습니다. 문서에 명확하게 나와 있으며 여러 Windows / PowerShell 버전 조합에서 지금 시도했습니다. Windows 7, 8 및 10은 모두 다양한 버전의 PowerShell에서 작동합니다. 오류가 발생하는 이유를 찾으면 여기에 공유하여 배울 수 있습니다. :>)
bopapa_1979

2
@DewaldSwanepoel-PowerShell 버전을 확실히 업그레이드 할 수 있습니다. 우리는 초콜릿으로합니다. 현재 직장에서 Windows 7에서 PowerShell 버전 5.0을 실행하고 있습니다.
bopapa_1979

1
@ KeithE.Truesdell- "Directory + Hidden"속성이 포괄적이며 디렉토리 만 검색합니다. -Directory를 추가하면 최신 버전의 PowerShell에서 더 빨라집니다. 나는 시간을 갈 것이다. 편집- "-디렉터리"를 추가하면 문서에서 알 수 있듯이 중요한 차이가 없습니다. 그러나 제안한대로 디렉토리 속성을 추가하면 속도가 느려집니다. 왜 그런지 알 수 있지만 Measure-Command로 두 가지 방법으로 테스트했으며 추가 Directory 속성이있는 세 가지 모두가없는 세 가지보다 느 렸습니다.
bopapa_1979

18

* nix에서는 모든 --bare리포지토리 도 찾습니다 .

find / -name "*.git" -type d

3
베어 리포지토리는 이름을 지정할 필요 name.git가 없습니다. 예를 들어 제가 따르지 않는 규칙 일뿐입니다.
Arkaitz Jimenez

3
베어 리포지토리가 해당 명명 규칙을 따를 필요가 없다는 점을 감안할 때 이러한 리포지토리에 보편적 인 방법이 find있습니까?
jmlane 2011-06-10

11

Git 저장소에는 모두 HEAD, refsobjects항목이 있습니다.

GNU / anything에서

find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n

확인하는 것만으로도 .git많은 베어 리포지토리와 하위 모듈이 누락됩니다.

검사에 대한 완전한 편집증을 얻으려면 git에게 인쇄하기 전에 모든 검사를 수행하도록 요청할 수 있습니다.

find -name HEAD -execdir test -e refs -a -e objects \; \
      -execdir sh -ec 'GIT_DIR=$PWD git rev-parse --absolute-git-dir 2>&-' \;

(편집 : .git/config파일이 필요 하다고 생각했지만 그렇지 않은 것으로 밝혀 졌으므로 절대 최소값 git init newrepo

mkdir -p newrepo/.git/{objects,refs}
echo ref: refs/heads/master >newrepo/.git/HEAD

)



3

Linux 및 OS X에서 .git의 루트 디렉토리 find/다음 과 같을 때 다음 명령이 가장 빠를 수 있습니다 (가없는 저장소 무시 ) .

find / -name .git -exec dirname {} \; -prune

그러나 아래 대부분의 저장소가 뿌리를 들어, 다음은 아마도 가장 빠른 (교체 할 수 있습니다 /으로 .또는 다른 루트) :

find / -type d -exec test -d {}/.git \; -prune -print

사용 된 기본 항목 에 대한 빠른 설명 find( 여기 에는 연산자 가 없기 때문에 -and암시 적입니다. 즉, 방문한 각 노드 기본 항목 중 하나가로 평가 될 때까지 왼쪽에서 오른쪽으로 평가됨 false) :

  • -nametrue이름 (와일드 카드로, 여기에 자주는 아니지만)과 일치하는 경우
  • -exec로 끝나는 명령을 실행하고 ;( \쉘의 해석을 피하기 위해 이스케이프 됨 ) true반환 상태가 0(즉, OK) 인 경우입니다. 현재 노드는 다음과 같이 사용할 수 있습니다 {}(이스케이프가 필요하지 않음).
  • -prune항상 true이며 모든 하위 노드를 건너 뜁니다.
  • -type dtrue디렉토리에 대해
  • -print-exec존재하는 경우 암시 적으로 추가되지 않기 때문에 여기에 필요합니다.

2

Linux에서는 루트 권한으로 다음 명령을 시도하십시오.

find / | grep \\.git$

이것은 .git로 끝나는 모든 파일을 검색합니다 .Windows, Linux 등의 검색 도구를 사용하여 수행 할 수 있습니다.


7
어떤 점 분들께 없습니다 find다음으로 필터링 출력 다 grep. 차라리 사용합니다--name "*.git"
Gregory Pakosz 2010 년

2
@Gregory Pakosz : 차이점은 무엇입니까?
Michel Gokan

11
@Michel, 2 개의 프로세스를 시작하고 첫 번째 프로세스가 파이프를 통해 전체 /트리를 grep으로 전송하도록합니다. 첫 번째 프로세스 는 모든 것을 수행하고 쓸모없는 IO 사용을 피할 수 있습니다. 일반적으로 사용자에게는 실제 차이가 아니지만 큰 파일 시스템의 경우 차이를 만들 수 있습니다.
Arkaitz Jimenez

2
당신은 그냥 명령을 찾을 사용 싶으면 어떤 방법은,이 명령을 사용하여,이 경우에 ... -name 대신 -regex 사용하는 것이 좋습니다 : '.. * \ 자식'/ -regex 찾을 sudo는
미셸 오감

4
@MichelKogan 더 나은 이유는 무엇입니까?
Mark Amery

2

간단한 PowerShell 버전 :

Get-ChildItem . -Recurse -Hidden .git

1
이것은 나를 위해 일했습니다! 감사합니다! 일반 사용자로 실행중인 powershell 스크립트가 액세스 할 수없는 위치에 액세스하려고 시도한 몇 가지 위치에서 오류가 발생했지만 추가 검토를 통해 어쨌든 걱정하지 말아야 할 위치였습니다 (예 : C:\users\<username>\PrintHood 또한, 파일에 출력을 추가하는 것이 유용하다는 것을 알았고 경로 / 디렉토리 정보 만 필터링하기 위해 경로 (이 스크립트가 많은 정보를 얻었으므로)에만 신경을 썼기 때문에 Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
Keith E. Truesdell

1

Linux의 경우 :

dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo 

1

Eric Burcham의 답변과 약간의 차이가 있습니다. 그 대답은 끝에 \ .git을 추가하지만 이것은 그렇지 않습니다.

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }

나는 하루를 시작할 때이 명령을 사용합니다. 단순히 위의 몇 가지 git 명령을 추가합니다. 어떤 이유로 든 우리의 git 저장소는 가져 오기를 실행 한 다음 가져 오는 경우 가장 잘 작동하지만 이유를 모릅니다. 그리고 어떤 이유로 든 많은 하위 모듈이 있습니다. 어쨌든 {} 사이에 필요한 것을 넣으십시오.

push-location; Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { cd $_.parent.fullname; write-host '*************'; $(get-location).path; git fetch; git pull; git checkout .; git clean -f; git submodule update; git status; write-host '*************'; write-host ' '; }; pop-location
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.