별칭을 추가할 수 없는 것 같습니다.git add **/
두 개의 별표가 문제를 일으키는 것 같습니다. 아니면 슬래시 때문일 수도 있습니다. 이 문제를 어떻게 해결할 수 있나요?
지금까지 나는 시도했다
alias ga='git add **/'
터미널에서 위의 별칭을 실행할 때 ga somename.java
별칭이 존재하지 않는 경우와 동일한 이 명령을 실행합니다 git add **/somename.java
.
또한 별표, 슬래시, 달러 기호, 따옴표 등을 추가해 보았습니다.
답변1
ga somename.java
응 줄임말 git add **/ somename.java
. 별칭의 첫 번째 매개변수는 별칭 내의 마지막 단어에 연결되지 않습니다. 이렇게 생각해보세요. 입력한 공백은 ga
제거되지 않습니다.
명령에 대한 대체 이름을 지정하거나 명령에 매개변수를 전달하는 것보다 더 복잡한 작업을 수행하려면 별칭 대신 함수를 사용하십시오.
이것은 zsh의 매우 다양한 버전입니다.
function ga {
git add **/$^~@(.N)
}
alias ga='noglob ga'
작동 방식은 다음과 같습니다 ga foo* bar
.
- 별칭
ga
은noglob ga
. - 고마워하는
noglob
사전 명령 수정자의noglob ga foo* bar
와일드카드 문자는 확장되지 않지만foo*
문자foo*
그대로 인수로 전달됩니다ga
. - ( 안의 것)은 명령의 첫 번째 단어가 아니기 때문에
ga
별명으로 조회되지 않으므로noglob ga …
인수와 함께 호출된 함수를 참조합니다.foo*
bar
$^~@
사용${^spec}
및${~spec}
매개변수 확장 형식. 수정자는 배열의 각 요소 앞에 추가되어^
합계 가 생성됩니다 . 이 수정자가 없으면 및 으로 확장됩니다 .**/
$@
**/foo*
**/bar
**/$@
**/foo*
bar
$~@
이제 인수의 와일드카드 문자가 확장됩니다. 이런 식으로 패턴은foo*
자체적으로 확장되지 않습니다. 즉**/foo*
, 다음과 같은 항목과 일치합니다sub/dir/foobar
.- 이것
.
글로벌 예선일반 파일만 일치합니다.-.
일반 파일과도 심볼릭 링크를 일치시키거나@.
일반 파일 외에 모든 심볼릭 링크를 일치 시키십시오 . - 이것
N
글로벌 예선일치하지 않는 패턴이 무시됩니다.(N)
패턴 중 하나가 아무것도 일치하지 않을 때 오류가 발생하도록 하려면 해당 패턴을 입력하지 마세요.
여기서 누락된 유일한 이점은 완성입니다.실현 가능 한하지만 여기서는 고생할 가치가 없다고 생각합니다.
Bash에서는 그렇게 좋은 결과를 얻을 수 없습니다. 와일드카드가 즉시 확장되어 디렉터리 내용 ga foo*
과 동일 해지는 것을 방지할 수 있는 방법은 없습니다.ga foo1 foo2
.git …
foo1
foo2
subdir
subdir/foobar
어떻게 그것을 놓칠 수 있겠습니까 subdir/foobar
?
Bash에서는 인수에 와일드카드를 인용해야 하므로 Git의 자체 패턴 일치에 의존하는 것이 좋습니다.경로 지정. 디렉터리 구분 기호를 일치시키는 데 특별한 주의를 기울이십시오. 즉, *
쉘 동작이 내장되어 있습니다 .**
function ga {
local x
for x in "$@"; do
git add "*/$x"
done
}
ga 'foo*' bar
마지막으로 .gitignore
최신 정보를 유지하고 자주 커밋한다면 git add .
.
답변2
find
쉘 extglob에 전적으로 의존하는 대신 재귀 검색을 수행하고 실행하도록 지시할 수 있습니다 .git add
ga() {
local -a find_args
local arg
for arg in "$@"; do
find_args+=( -o -name "$arg" )
done
find . '(' -false "${find_args[@]}" ')' -exec git add -- {} +
}