.gitignore 및 .gitattributes 중 하나를 포함하지 않는 모든 git 저장소를 찾습니다.

.gitignore 및 .gitattributes 중 하나를 포함하지 않는 모든 git 저장소를 찾습니다.

.gitattributes기본적으로 루트 디렉터리에 파일도 없고 파일도 없는 모든 git 저장소를 찾고 싶습니다 ..gitignore

이전에 찾은 적이 있지만 find . -type d '!' -exec test -e "{}/.gitignore" ';' -print최상위 git 디렉토리뿐만 아니라 모든 디렉토리가 나열되어 있습니다.

내 디렉토리 트리는 다음과 같습니다.

GitHub
├─ _Clones
|  ├─ repo1 (has .gitignore)
|  └─ repo2
├─ _Forks
|  ├─ repo1 (has .gitattributes)
|  └─ _For-Later
|      ├─ repo2
|      └─ repo3
├─ myrepo1 (has both)
├─ myrepo2 (has both)
...
└─ myrepo10

_Clones\repo2이와 같은 레이아웃에서는 출력이 , 및 가 되기를 원합니다 ._Forks\_For-Later\repo2_Forks\_For-Later\repo3myrepo10

매개변수를 이용해 찾아보았 depth으나 디렉토리별 변수입니다!

답변1

git 저장소의 루트 디렉터리를 나열하려면 다음 명령을 사용합니다.

find . -name .git -print0 | xargs -0 dirname

Variant는 다음을 포함하는 모든 폴더를 찾습니다 .gitignore.

find . -name .gitignore -print0 | xargs -0 dirname

루트 디렉터리에 포함되지 않은 git 저장소를 확인하려면 .gitignore두 가지 폴더 세트만 설정하면 됩니다.

comm -23 <(find . -name .git -print0 | xargs -0 dirname | sort) <(find . -name .gitignore -print0 | xargs -0 dirname | sort)

이는 두 개의 폴더 세트(정렬해야 함)를 비교하고 첫 번째 세트에만 나타나는 폴더를 나열합니다. 작업 <()프로세스 교체그리고 모든 명령의 출력을 파일 대신 다른 명령의 입력으로 사용할 수 있습니다.

루트 디렉토리에 포함되지 않은 git 저장소를 .gitignore찾으려면 위와 같이 바꾸십시오 ..gitattributes.gitattributes

원하는 최종 출력을 얻으려면 다음 두 가지를 결합하십시오.

comm -23 <(comm -23 <(find . -name .git -print0 | xargs -0 dirname | sort) <(find . -name .gitignore -print0 | xargs -0 dirname | sort)) <(find . -name .gitattributes -print0 | xargs -0 dirname | sort)

관련 정보