git add * (별표) 대 git add. (기간) page를 살펴 봤지만

나는 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등).

도와 주셔서 감사합니다!



답변

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

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


답변

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


답변

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

*쉘 에서 별표를 사용하면 라는 기능 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을 트리거하고 점으로 시작하지 않는 모든 파일과 디렉토리로 확장된다는 것입니다.


답변

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

추가 참고 사항 (@ 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\*.


답변

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

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

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

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

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