힘내 체크 아웃 의미 더블 대시 이 git 명령에서 파일 이름 앞에 이중

이 git 명령에서 파일 이름 앞에 이중 대시의 의미는 무엇입니까?

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

그들은 필수입니까? 그것은 동등합니까

git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt



답변

path/to/file.txtGit 리포지토리에 이름이 지정된 파일이 있고 변경 내용을 되돌리고 싶다고 가정 합니다.

git checkout path/to/file.txt

이제 파일 이름이 master

git checkout master

으악! 대신 브랜치가 변경되었습니다. --분리형은 나무 당신은 당신이 체크 아웃 할 파일에서 확인하시기 바랍니다.

git checkout -- master

일부 괴물이 -f저장소에 이름이 지정된 파일을 추가 한 경우에도 도움이됩니다 .

git checkout -f      # wrong
git checkout -- -f   # right

이것은 git-checkout : Argument Disambiguation에 설명되어 있습니다.


답변

이중 대시 “-“는 “명령 줄 플래그 끝”을 의미합니다. 즉, 명령 줄 옵션 뒤에 오는 내용을 구문 분석하지 않도록 이전 명령에 지시합니다.


답변

--인수에 와일드 카드 ( *)가 포함 된 경우 Git 2.5 (2015 년 2 분기)에 ‘ ‘가 있으므로 필요하지 않습니다.

git <cmd> <revs> <pathspec>잘못 입력 된 경로를 잡기 위한 ” “명령 행 규칙 을 돕는 휴리스틱은 명령 행의 후반 부분에있는 rev가 아닌 모든 매개 변수가 작업 트리의 파일 이름인지 확인하는 것이지만 ” git grep $str -- \*.c“은 항상 ” --제정신이 누구도 말 그대로 별표 (*)를 가진 파일을 만들지 않기 때문에 ” “로 명확 해 집니다.

Git 2.5는 휴리스틱을 풀어 사용자가 와일드 카드 문자열을 사용하여 pathspec을 제공 할 수 있다고 선언했다 .

git checkout 'a*'
# same as
git checkout -- 'a*'

Duy Nguyen ( )의 commit 28fcc0b (2015 년 5 월 2 일)를 참조하십시오 . ( Junoio C Hamano의해 합병 커밋 949d167 , 2015 년 5 월 19 일)nguyenlocduy
gitster

pathspec: --와일드 카드 사용시 ” ” 필요 없음

--“이 명령 행에없고 명령이 rev와 경로를 모두 취할 수있는 경우, 인수가 확장 된 SHA-1과 경로 둘 다로 간주 될 수 있으면 ” --“가 필요하거나 git이 계속하기를 거부합니다.
현재 다음과 같이 구현됩니다.

  • (1) 인수가 rev이면 작업 트리에 존재해서는 안됩니다.
  • (2) 그렇지 않으면 워크 트리에 존재해야합니다.
  • (3) 그렇지 않으면 ” --“가 필요합니다.

이러한 규칙은 리터럴 경로에 적용되지만 리터럴이 아닌 경로 사양이 포함 된 경우 거의 항상 ” --” 를 추가해야합니다. ” “(2) 실패하고 (1) 거의 충족되지 않기 때문에 ” *.c“(예 : (1) ” *.c“) 라는 참조가 있으면 충족됩니다 .

이 패치는 유효한 ( *) 와일드 카드 경로 스펙을 “작업 트리에 있음” 으로 간주하여 규칙을 약간 수정합니다 .
규칙은 다음과 같습니다.

  • (1) arg가 rev 인 경우 작업 트리에 존재하거나 유효한 와일드 카드 경로 스펙이 아니어야합니다.
  • (2) 그렇지 않으면 워크 트리에 있거나 와일드 카드 경로 사양입니다.
  • (3) 그렇지 않으면 ” --“가 필요합니다.

새로운 규칙을 사용 --하면 와일드 카드 경로 스펙이 관련된 대부분의 경우 ” “가 필요하지 않습니다.


Git 2.26 (Q1 2020)에서는 백 슬래시 이스케이프 처리 된 glob 특수 문자가 “와일드 카드가 pathspec”규칙에 포함되지 않도록 개정 및 경로 사양을 구분하는 명확성 논리가 조정되었습니다.

Jeff King ( )의 commit 39e21c6 (2020 년 1 월 25 일)을 참조하십시오 . ( Junio ​​C Hamano의해 합병 커밋 341f8a6 , 2020 년 2 월 12 일)peff
gitster

verify_filename(): “와일드 카드는 경로 스펙”규칙에서 백 슬래시 처리

보고자 : David Burström
서명자 : Jeff King

커밋 28fcc0b71a ( pathspec: --와일드 카드 사용시 ” ” 필요 없음 , 2015-05-02) 허용 :

git rev-parse '*.c'

이중 대시없이.

그러나 와일드 카드를 확인하는 데 사용되는 규칙은 실제로 어떤 특수 효과도 찾습니다.
a\b” 와 같은 와일드 카드 일치를 실제로 수행하지 않는 패턴 은 경로 스펙으로 간주 됨을 의미하므로 지나치게 자유 롭습니다.

디스크에 이러한 파일이 있으면 아마도 원하는 것입니다.
그러나 그렇지 않으면 결과가 혼란스러워집니다. ” there's no such path a\b” 라고 말하지 않고 아무 것도 일치하지 않는 (또는 적어도 의도 한 것과 일치하지 않는) 경로 사양으로 조용히 받아들입니다.
마찬가지로, 경로 ” a\*b“를 검색해도 검색이 확장되지 않습니다. ” a*b” 단일 항목 만 찾습니다 .

이 커밋은 glob 메타 문자가 검색을 확장 할 때만 규칙을 전환하여 두 경우 모두 오류를보고 함을 의미합니다 ( --물론 ” “를 사용하여 명확하게 말할 수 있습니다 (DWIM 휴리스틱을 강화하고 있음)).

( DWIM : 무슨 뜻인지 )

우리는 28fcc0b71a 의 원래 기능을 전혀 테스트하지 않았습니다 .
따라서이 패치는 이러한 경우를 테스트 할뿐만 아니라 기존 동작에 대한 회귀 테스트를 추가합니다.


답변