얼마나 멀리 가야 하는지 알지 못한 채 디렉토리 트리 내의 상위 항목으로 CD를 이동할 수 있습니까?

얼마나 멀리 가야 하는지 알지 못한 채 디렉토리 트리 내의 상위 항목으로 CD를 이동할 수 있습니까?

저는 하위 모듈과 저장소에 대한 변경 사항 추가, 커밋, 푸시를 자동화하는 스크립트를 작성 중입니다. 일부 하위 모듈은 다른 하위 모듈보다 더 멀리 중첩되어 있으므로 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"

관련 정보