etc./StackOverFlow

"git add -A"와 "git add"의 차이점

청렴결백한 만능 재주꾼 2021. 11. 5. 23:09
반응형

질문자 :cmcginty


git add [--all|-A] 명령은 git add 와 동일한 것으로 보입니다 git add . . 이 올바른지? 그렇지 않다면 어떻게 다릅니까?



이 답변은 Git 버전 1.x 에만 적용됩니다. Git 버전 2.x의 경우 다른 답변을 참조하세요.


요약:

  • git add -A 모든 변경 사항을 단계화합니다.

  • git add . 삭제 없이 새 파일과 수정 사항을 준비합니다(현재 디렉터리 및 해당 하위 디렉터리에서).

  • git add -u 새 파일 없이 수정 및 삭제 단계


세부 사항:

git add -A 는 git add 와 동일 git add .; git add -u .

git add . 의 중요한 점. 작업 트리를 살펴보고 변경되었거나 새 것이고 무시되지 않은 경우 모든 경로를 준비된 변경 사항에 추가하고 'rm' 작업을 준비하지 않습니다.

git add -u 는 이미 추적된 모든 파일을 살펴보고 파일이 다르거나 제거된 경우 해당 파일에 대한 변경 사항을 준비합니다. 새 파일을 추가하지 않고 이미 추적된 파일에 대한 변경 사항만 준비합니다.

git add -A 는 이 두 가지를 모두 수행할 수 있는 편리한 단축키입니다.

이 같은과에서 차이를 테스트 할 수 있습니다 (망할 놈의 버전에 대한 귀하의 출력을 2.x으로 유의 git add . git status 다를 것이다) :

 git init echo Change me > change-me echo Delete me > delete-me git add change-me delete-me git commit -m initial echo OK >> change-me rm delete-me echo Add me > add-me git status # Changed but not updated: # modified: change-me # deleted: delete-me # Untracked files: # add-me git add . git status # Changes to be committed: # new file: add-me # modified: change-me # Changed but not updated: # deleted: delete-me git reset git add -u git status # Changes to be committed: # modified: change-me # deleted: delete-me # Untracked files: # add-me git reset git add -A git status # Changes to be committed: # new file: add-me # modified: change-me # deleted: delete-me

CB Bailey

힘내 버전 1.x

명령 새 파일 수정된 파일 삭제된 파일 설명
git add -A ✔️ ✔️ ✔️ 모든(신규, 수정, 삭제) 파일 준비
git add . ✔️ ✔️ 현재 폴더에서만 새 파일 및 수정된 파일 준비
git add -u ✔️ ✔️ 수정 및 삭제된 파일만 단계

힘내 버전 2.x

명령 새 파일 수정된 파일 삭제된 파일 설명
git add -A ✔️ ✔️ ✔️ 모든(신규, 수정, 삭제) 파일 준비
git add . ✔️ ✔️ ✔️ 현재 폴더의 모든(새, 수정, 삭제) 파일 준비
git add --ignore-removal . ✔️ ✔️ 새 파일 및 수정된 파일만 스테이징
git add -u ✔️ ✔️ 수정 및 삭제된 파일만 단계

긴 형식 플래그:

  • git add -A git add --all 과 동일합니다.
  • git add -u git add --update 와 동일합니다.

추가 읽기:


Developer

Git 2.0에서는 git add -A 가 기본값인 git add . git add -A . 와 같습니다. .

git add <path> git add -A <path> "와 동일하므로 " git add dir/ "은 디렉토리에서 제거한 경로를 확인하고 제거를 기록합니다.
Git의 이전 버전에서 " git add <path> "는 제거를 무시했습니다.

당신은 "말할 수 git add --ignore-removal <path> "만 추가 또는 수정 된 경로를 추가하는 <path> , 당신이 정말로 원하는 경우.

git add -A git add :/ 와 같습니다( 상위 git repo 폴더의 모든 항목 추가 ).
git 2.7(2015년 11월)에서는 " : "라는 폴더를 추가할 수 있습니다.
Junio C gitster ( gitster )의 commit 29abb33 (2015년 10월 25일)을 참조하십시오.


git add . 에 대해 이야기할 때 git 2.0(Q1 또는 Q2 2014)부터 시작 한다는 점에 유의하세요. (작업 트리 내의 현재 경로)에는 '를 사용해야 합니다 . ' 다른 git add 명령에서도 마찬가지입니다.

그 의미는:

" git add -A . " 는 " git add .; git add -u . " 와 동일합니다 .

git add -Agit add -u 대한 추가 ' . '에 유의하십시오)

git add -A 또는 git add -u 는 현재 경로뿐만 아니라 전체 작업 트리에서 작동하기 때문입니다 (git 2.0부터 시작).

이러한 명령은 git commit -a " 및 기타 명령과의 일관성을 위해 Git 2.0의 전체 트리에서 작동 합니다. 수 있도록하는 메커니즘이 없을 것이기 때문에 " git add -u "것처럼 작동을 " git add -u . "이 "을 사용하는 사람들을 위해 중요하다 git add -u 경로에 대해서만 인덱스를 업데이트 (pathspec없이)" 현재 하위 디렉토리에서 Git 2.0이 오기 전에 git add -u . "라고 명시적으로 말하도록 손가락 훈련을 시작합니다.

이러한 상황에서 Git 2.0의 동작이 현재 버전과 다르기 때문에 이러한 명령이 pathspec 없이 실행되고 현재 디렉토리 외부에서 로컬 변경이 있을 때 경고가 발행됩니다.


VonC

Charles의 지침 에서 테스트한 후 내 제안된 이해는 다음과 같습니다.

 # For the next commit $ git add . # Add only files created/modified to the index and not those deleted $ git add -u # Add only files deleted/modified to the index and not those created $ git add -A # Do both operations at once, add to all files to the index

이 블로그 게시물은 해당 명령을 적용 할 수 있습니다 어떤 상황에서 이해하는 것이 도움이 될 수있는 당신의 망할 놈의 작업 디렉토리에서 삭제 된 파일 제거 .


Richard

Git 2.0에서 변경된 사항 (2014-05-28 ):

  • -A 는 이제 기본값입니다.
  • --ignore-removal 과 함께 사용할 수 있습니다.
  • 명령줄에 경로가 없는 하위 디렉터리의 git add -ugit add -A

따라서 Git 2의 경우 답은 다음과 같습니다.

  • git add . git add -A . 현재 디렉토리에 신규/수정/삭제된 파일 추가
  • git add --ignore-removal . 현재 디렉토리에 새로운/수정된 파일을 추가합니다.
  • git add -u . 현재 디렉토리에 수정/삭제된 파일 추가
  • 점이 없으면 현재 디렉터리에 관계없이 프로젝트의 모든 파일을 추가합니다.

0xF

Git 2.x에서 :

  • 작업 디렉토리 에 직접 위치한 경우 git add -Agit add . 차이 없이 작동합니다.

  • 작업 디렉토리의 하위 디렉토리에 있는 경우 git add -A 는 전체 작업 디렉토리 의 모든 파일을 추가하고 git add . 현재 디렉토리 에서 파일을 추가합니다.

그리고 그게 다야.


simhumileco

보다 정제된 빠른 답변:

아래에서 둘 다 수행합니다( git add --all 과 동일).

 git add -A

새 파일 + 수정된 파일 단계

 git add .

단계 수정 + 삭제된 파일

 git add -u

K. Kilian Lindberg

git add . git add -A . 와 같습니다. 현재 및 하위 폴더에서만 색인에 파일을 추가합니다.

git add -A 작업 트리의 모든 폴더에서 색인에 파일을 추가합니다.

추신: 정보는 Git 2.0 (2014-05-28)에 관한 것입니다.


Alex78191

이것이 좀 더 명확성을 추가할 수 있기를 바랍니다.

 !The syntax is git add <limiters> <pathspec> ! Aka git add (nil/-u/-A) (nil/./pathspec)

제한자는 -u 또는 -A 또는 nil일 수 있습니다.

Pathspec은 파일 경로 또는 점, '.' 현재 디렉토리를 나타냅니다.

Git '추가' 방법에 대한 중요한 배경 지식:

  • 보이지 않는 파일, 접두사가 점이 있는 파일(dotfile)은 Git에서 자동으로 인식되지 않습니다. 그들은 '추적되지 않음'으로 나열되지도 않습니다.
  • 빈 폴더는 Git에 의해 추가되지 않습니다. 그들은 '추적되지 않음'으로 나열되지도 않습니다. (해결 방법은 추적 파일에 보이지 않을 수 있는 빈 파일을 추가하는 것입니다.)
  • Git 상태는 해당 하위 폴더에서 하나 이상의 파일이 추적되지 않는 한 하위 폴더 정보, 즉 추적되지 않은 파일을 표시하지 않습니다. 그 전에 Git은 전체 폴더를 범위 밖, 즉 '비어 있음'으로 간주합니다. 추적 항목이 비어 있습니다.
  • filespec = '.' 지정 (점) 또는 현재 디렉토리는 -A 도 지정하지 않는 한 재귀적이지 않습니다. 점은 엄격하게 현재 디렉토리를 나타냅니다. 위 및 아래에 있는 경로를 생략합니다.

이제 그 지식을 바탕으로 위의 답변을 적용할 수 있습니다.

리미터는 다음과 같습니다.

  • -u = --update = 추적된 파일의 하위 집합 => 추가 = 아니요; 변경 = 예; 삭제 = 예. => 아이템 추적되는 경우.
  • -A = --all ( -a 없음) = 모든 추적되지 않는/추적된 파일의 상위 집합입니다. => 항목이 인정되는 경우, git add -A 을 찾아서 추가합니다.

경로 스펙은 다음과 같습니다.

  • Git 2.0 이전 버전에서 두 개의 리미터(update 및 all)에 대해 새로운 기본값은 현재 경로(Git 1.9 또는 이전 버전) 대신 전체 작업 트리에서 작동하는 것입니다.
  • 그러나 v2.0에서는 작업이 현재 경로로 제한될 수 있습니다. 명시적 점 접미사(Git 1.9 또는 이전 버전에서도 유효함)를 추가하기만 하면 됩니다.

git add -A .

git add -u .

결론적으로 내 정책은 다음과 같습니다.

  1. 추가할 덩어리/파일이 git status 에서 설명되는지 확인하십시오.
  2. 파일/폴더가 보이지 않아 누락된 항목이 있는 경우 별도로 추가하십시오.
  3. 일반적으로 관심 있는 파일만 추적되지 않거나 인식되지 않도록 좋은 .gitignore
  4. 저장소의 최상위 수준에서 "git add -A"를 눌러 모든 항목을 추가합니다. 이것은 모든 Git 버전에서 작동합니다.
  5. 원하는 경우 인덱스에서 원하는 항목을 제거합니다.
  6. 큰 버그가 있는 경우 'git reset'을 수행하여 인덱스를 완전히 지웁니다.

AnneTheAgile

둘 다 git add . git add -A 는 최신 버전의 Git에서 모든 신규, 수정 및 삭제된 파일을 준비합니다.

차이점은 git add -A 작업 중인 Git 저장소에 속하는 "상위, 현재 및 하위 디렉토리"에 파일을 준비한다는 것입니다. git add . 수행합니다. 만 다음 현재 디렉토리에있는 파일과 하위 디렉토리 (외부 거짓말을하지 않는 파일, 즉, 높은 디렉토리) 단.

다음은 예입니다.

 /my-repo .git/ subfolder/ nested-file.txt rootfile.txt

현재 작업 디렉토리가 /my-repo 이고 rm rootfile.txt , cd subfolder , git add 순으로 git add . , 삭제된 파일을 준비 하지 않습니다. 그러나 git add -A 명령을 수행하는 위치에 관계없이 이 변경 사항을 확실히 준비합니다.


Sabbir Ahmed

-A 옵션은 작업 트리와 일치하도록 인덱스 항목을 추가, 수정 및 제거합니다.

Git 2에서는 -A 옵션이 이제 기본값입니다.

. Git 문서에 따라 현재 있는 디렉토리로 업데이트 범위를 제한하는 기능이 추가되었습니다.

<pathspec> 을 지정하지 않으면 전체 작업 트리의 모든 파일이 업데이트됩니다(현재 디렉터리와 하위 디렉터리로 업데이트를 제한하는 데 사용된 이전 버전의 Git).

내가 추가할 한 가지는 --interactive 또는 -p 모드가 사용되는 경우 git add 는 업데이트( -u ) 플래그가 사용된 것처럼 동작하고 새 파일을 추가하지 않는다는 것입니다.


Yehuda Schwartz

각 플래그가 하는 일에 대한 설명이 있으면 유용합니다. 비트 와 같은 CLI를 사용하면 입력할 때 플래그 설명에 액세스할 수 있습니다.


Chris W

출처 : http:www.stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add

반응형