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