저는 하위 모듈과 저장소에 대한 변경 사항 추가, 커밋, 푸시를 자동화하는 스크립트를 작성 중입니다. 일부 하위 모듈은 다른 하위 모듈보다 더 멀리 중첩되어 있으므로 repo의 루트까지 cd 백업해야 합니다. git submodule foreach
내가 작업 중인 브랜치에서 커밋하고 싶지 않은(빠른 테스트) 다른 하위 모듈에 변경 사항이 있을 수 있기 때문에 패턴을 사용하지 않습니다 . 나는 각 하위 모듈에 대해 슈퍼 저장소에 분기를 설정했습니다. cd를 사용하면 저장소로 이동하도록 편리하게 이름이 지정되었습니다.
나는 찾았다이 질문여기에는 n 레벨을 높이는 함수 생성 및/또는 별칭 지정과 관련된 답변이 있습니다. 다른 작업에 대해 이미 별칭이 지정된 함수가 있으므로 이와 같은 작업을 수행할 수 있지만 모든 디렉터리나 다른 스크립트에 대해 다른 기능이 필요하므로 다른 레벨에 있는 Git 확장에서는 다른 핫키가 필요합니다.
내 저장소를 관리하기 위해 Git Extensions를 사용하고 있으며 해당 설정에서 스크립팅 인터페이스를 제공합니다. .git/config의 별칭 아래에 있는 현재 기능은 다음과 같습니다.
applyupdate = "!f() { \
cd \"$1\"/;\
git add .;\
git commit -m \"$2\";\
git push;\
cd ..;\ #####this needs to be n levels
git add \"$1\";\
git commit -m \"$2\";\
git push;\
}; f"
이는 다음 인수를 사용하여 실행하는 핫키를 통해 Git Extension에서 실행됩니다.
applyupdate {cBrnach} {{UserInput}}
활성 분기는 어디에 {cBranch}
있습니까? 그래프에서 동일한 커밋에 여러 개가 있는 경우 분기를 요청
하고 {{UserInput}}
인용된 커밋 메시지를 삽입하는 대화 상자를 표시합니다.
cd n-levels
몇 단계까지 올라가야 하는지 입력할 필요 없이 단일 기능으로 수행할 수 있나요 ? {UserInput}
Git Extensions의 옵션이 여러 입력에서 작동하지 않는다고 생각합니다 .
답변1
덕분에아르카디우시 드라브치크언급하기 위해 git rev-parse --show-toplevel
.
스크립트를 이것으로 변경하면 나에게 효과적입니다.
applyupdate = "!f() { \
cd \"$1\"/;\
git add .;\
git commit -m \"$2\";\
git push;\
cd ..;\ #this gets me out of the submodule
cd \"$(git rev-parse --show-toplevel)\";\ #this return to super-repo's root
git add \"$1\";\
git commit -m \"$2\";\
git push;\
}; f"