"git add **/"에 별칭을 추가하는 방법

"git add **/"에 별칭을 추가하는 방법

별칭을 추가할 수 없는 것 같습니다.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.

  1. 별칭 ganoglob ga.
  2. 고마워하는noglob사전 명령 수정자noglob ga foo* bar와일드카드 문자는 확장되지 않지만 foo*문자 foo*그대로 인수로 전달됩니다 ga.
  3. ( 안의 것)은 명령의 첫 번째 단어가 아니기 때문에 ga별명으로 조회되지 않으므로 noglob ga …인수와 함께 호출된 함수를 참조합니다.foo*bar
  4. $^~@사용${^spec}${~spec}매개변수 확장 형식. 수정자는 배열의 각 요소 앞에 추가되어 ^합계 가 생성됩니다 . 이 수정자가 없으면 및 으로 확장됩니다 .**/$@**/foo***/bar**/$@**/foo*bar
  5. $~@이제 인수의 와일드카드 문자가 확장됩니다. 이런 식으로 패턴은 foo*자체적으로 확장되지 않습니다. 즉 **/foo*, 다음과 같은 항목과 일치합니다 sub/dir/foobar.
  6. 이것. 글로벌 예선일반 파일만 일치합니다. -.일반 파일과도 심볼릭 링크를 일치시키거나 @.일반 파일 외에 모든 심볼릭 링크를 일치 시키십시오 .
  7. 이것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 -- {} +
}

관련 정보