git add * (별표) 대 git add. (기간)


130

나는 git을 처음 사용하고 git에 파일을 추가하는 것에 대해 질문이 있습니다. 나는 사이의 차이에 대한 여러 유래의 질문에 발견 git add .하고 git add -a, git add --all, git add -A, 등 그러나 나는 무엇을 설명하는 장소 찾을 수 있었어요 git add *수행합니다. git add man page를 살펴 봤지만 도움이되지 않았습니다. 대신 사용하고 있는데 git add .동료가 이유를 물었습니다. 나는 대답이 없었다. 나는 항상 git add *.

인가 git add .git add *같은? 하나는 현재 디렉토리에서만 변경된 파일을 추가하고 다른 하나는 현재 디렉토리 및 하위 디렉토리 (재귀 적으로)에서 파일을 추가합니까?

git add -A git add .및 의 차이점을 보여주는 다른 스택 질문 중 하나에 나열된 훌륭한 차트 git add -u가 있지만 git add *.

여기에 이미지 설명 입력

참고 : 별표를 와일드 카드로 사용하는 것의 의미를 이해합니다 (지정된 확장자를 가진 모든 파일 추가). 예를 들어, git add *.html있는 모든 파일을 추가합니다 .html(그러나 무시 확장을 .css, .js등).

도와 주셔서 감사합니다!


1
그 차트는 어디에서 왔습니까? 나는 git add .다시 시도했지만 X그 행에서 제안하는 것과 달리 문제가없는 삭제 된 파일을 준비했습니다 .
David

@David 그 이미지는 이 답변 에서 가져온 것이며 이전 버전의 git에 적용됩니다.
jerry

4
오래된 사진! Git 2.x는 다릅니다 : i.stack.imgur.com/KwOLu.jpg
Hannes Schneidermayer

답변:


132

add *이름이 점으로 시작하는 파일을 제외하고 현재 디렉토리의 모든 파일을 추가하는 것을 의미합니다. 이것은 쉘 기능이며 Git은 파일 목록 만 수신합니다.

add . 쉘에서 특별한 의미가 없으므로 Git은 전체 디렉토리를 재귀 적으로 추가합니다. 이는 거의 동일하지만 이름이 점으로 시작하는 파일을 포함합니다.


6
따라서 git add ..gitignore 및 점으로 시작하는 모든 항목을 포함하여 git add *모든 파일, 폴더 및 하위 폴더를 추가 하고 점으로 시작 하는 파일, 폴더 및 하위 폴더를 추가할까요? 정확합니까?
Tyler Youngblood

9
정말 맞습니다. 또한 git add *하위 디렉토리에있는 경우에도 점으로 시작하는 파일을 추가합니다.
데니스

4
git add .또한 .gitignore를 존중하지만 git add *도트 파일이 아닌 파일이 gitignor되면 오류가 발생합니다. 보다 사용하는 git add .것이 훨씬 낫 습니다 git add *.
rosuav

2
주목할만한 점은 CMD.EXE에서 DOS / Windows에서 Git을 호출하는 경우 셸이 아닌 Git* 입니다. 이 경우 Git은 도트 파일을 찾습니다.
torek

2
@ Thor84no : *셸에서 보호하기 위해을 인용하면 Git은 Linux 시스템에서도 도트 파일을 찾습니다 . 숨겨진 부분의 문제가 아니라 단지 Git의 컴파일 된 규칙이 다르다는 것입니다.
torek

30

*는 git의 일부가 아닙니다. 쉘에서 해석하는 와일드 카드입니다. *는 현재 디렉토리의 모든 파일로 확장 된 다음 git로 전달됩니다 add. .현재 디렉토리 자체이고 git adding은 디렉토리 와 그 아래의 모든 파일을 추가합니다.


1
그렇다면 별표를 사용하는 이유가 모두 있습니까? 기간 대신 사용하면 어떤 이점이 있습니까? 혹은 그 반대로도? 나는 그것을 튜토리얼에서 보았을 것이라고 확신합니다. 다른 방법으로는 사용하지 않았을 것입니다. 나는 (당신이 의심 할 여지없이 짐작했듯이) 명령 줄 전문가가 아닙니다.
Tyler Youngblood 2014 년

5
*숨겨진 파일 (예 : 이름이로 시작하는 파일)을 방지합니다 .. 어쨌든 특정 파일을 추가하지 않는 경우에는 git add -u(또는 git add -A새 파일을 만드는 경우) 사용합니다.
Mureinik 2014 년

3
두 분 모두 제 질문에 답 하셨기 때문에 누구에게 크레딧을 줄지 결정하는 데 어려움이있었습니다. 당신보다 담당자가 적기 때문에 아래에서 Denis를 선택했습니다. 그래서 나는 그에게 녹색 수표를주는 것이 당신에게 이익이되는 것보다 그에게 더 많은 이익을 줄 것이라고 생각했습니다. 그게 말이 되길 바래요? 하지만 두 가지 설명 모두 정말 감사합니다. 감사!
Tyler Youngblood 2014 년

7

. 쉘 에서 점 을 사용하는 것은 일반적으로 "현재 디렉토리"를 의미합니다.

*쉘 에서 별표를 사용하면 라는 기능 file-globbing이 활용됩니다. 예를 들어 bash에서 함수 glob()는 바로 그렇게합니다. glob ( man 7 glob) 의 맨 페이지는 다음과 같이 설명합니다.

기술

Long ago, in UNIX V6, there was a program /etc/glob that would expand 
wildcard patterns.  Soon afterward this became a shell built-in.
These days there is also a library routine glob(3) that will perform this 
function for a user program.

와일드 카드 매칭

A string is a wildcard pattern  if it contains one of the characters '?', '*' or '['. 

글 로빙

Globbing is the operation that expands a wildcard pattern 
into the list of pathnames matching the pattern.

당신이 포함 된 명령 줄에 모든 프로그램에 인수를 전달 수단 '?', '*'또는 '['최초의 대체 (globbing) 파일 목록에 와일드 카드 패턴을 확장하고 프로그램 자체에 대한 인수로 이러한 파일을 제공합니다.

'git add .'와 사이의 의미 차이는 Denis에'git add *' 의해 명확하게 설명됩니다 .

git add추가 될 파일 목록이 필요합니다. 위의 예에서 쉘 은 *또는 .각각을 확장 하고 결과를 git add에 매개 변수로 제공합니다. 이제 차이점은 git add .git을 사용하면 현재 디렉토리로 확장되는 반면 git add *파일 globbing을 트리거하고 점으로 시작하지 않는 모든 파일과 디렉토리로 확장된다는 것입니다.


5

명확성을 위해 아래 표에 답을 넣었습니다.

여기에 이미지 설명 입력

추가 참고 사항 (@ reka18 주석에서 영감을 얻음) :

주 1. git add -Agit add -u명령은 추가 정제 (파일 이름에 대한 하위 디렉토리 또는 마스크 표시) 전체 작업 디렉토리 (또한 우리가 디렉토리의 작업 디렉토리에서 명령을 실행하는 경우)의 범위에서 작동 될 추가 매개 변수없이 수행.

2. 참고.하고 *각각 명령의 경로를 명확히 디렉토리 경로 (현재 디렉토리)와 와일드 카드입니다. 예를 들어, git add .또는 git add *명령이 작업 디렉토리의 일부 하위 디렉토리에서 실행되면 해당 작업은 전체 작업 디렉토리가 아닌이 하위 디렉토리 내에서만 사용됩니다.

주 3git add -Agit add -u명령을 상기 경로를 추가하거나, 예를 들면, 파일에 대한 마스크에 의해 정제 할 수있다 git add -A app/controllersgit add -u app\styles\*.


2
그래서 망할 놈의 같은 버전 2.x git add -Agit add .동일하다?
reka18

아주 좋은 질문에 대해 @ reka18에게 감사드립니다. 그것은 내 대답을 완성하도록 영감을주었습니다 ... 귀하의 질문에 대한 대답 : 작업 디렉토리에서 호출하면 아니오, 그러나 하위 디렉토리에 있으면 예 ( git add -A전체 작업 디렉토리 및 git add .항상 현재 디렉토리에 적용됩니다 ).
simhumileco

2
  • git add -A (--all) 모든 항목을 추가하여 디스크의 폴더에있는 모든 항목이 준비 영역에 표시되도록합니다.

  • git add . 모든 것을 스테이징하지만 디스크에서 삭제 된 파일은 제거하지 않습니다.

  • git add * 점으로 시작하는 파일이 아닌 모든 것을 스테이징하고 디스크에서 삭제 된 파일을 제거하지 않습니다.

  • git add -u (--update) 수정 된 파일 만 스테이징하고 디스크에서 삭제 된 파일을 제거하고 새로 추가하지 않음

  • git add <file name 1> <file name 2> 특정 파일 만 추가

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.