이 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
이 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.txt
Git 리포지토리에 이름이 지정된 파일이 있고 변경 내용을 되돌리고 싶다고 가정 합니다.
git checkout path/to/file.txt
이제 파일 이름이 master
...
git checkout master
으악! 대신 브랜치가 변경되었습니다. --
분리형은 나무 당신은 당신이 체크 아웃 할 파일에서 확인하시기 바랍니다.
git checkout -- master
일부 괴물이 -f
저장소에 이름이 지정된 파일을 추가 한 경우에도 도움이됩니다 .
git checkout -f # wrong
git checkout -- -f # right
--
옵션을 다른 인수와 구분하는 데 사용할 수있는 POSIX 표준의 일부 이므로 cp
and mv
(Bash의 일부는 아님) 명령에서 볼 수 있습니다.
checkout
명령 문서 에 제대로 설명되어 있지 않은지 아십니까?
checkout
명령에 가능한 매개 변수처럼 나열되어 있지만 설명서에서 그 기능 또는 사용 이유를 설명하는 곳은 없습니다.
--
. 리눅스 배경에서 오지 않은 사람은 그것이 무엇인지 분명하지 않습니다. 나에게, 그것은 기능적 목적에 대한 설명없이 git 고유의 구문 인 것처럼 보였다. 다른 옵션과 같은 간단한 설명이나 적어도 리눅스 매뉴얼 페이지에 대한 링크를 갖는 것이 좋습니다.
--
인수에 와일드 카드 ( *
)가 포함 된 경우 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 의 원래 기능을 전혀 테스트하지 않았습니다 .
따라서이 패치는 이러한 경우를 테스트 할뿐만 아니라 기존 동작에 대한 회귀 테스트를 추가합니다.