2012-05-05 3 views
1

소스 제어를위한 새로운 도구입니다. 나는 내가가는대로 모든 것을 이해하고 있는지 확인하고 싶다. 그리고 매우 일찍 나는 이상한 것처럼 보이는 것을 쳤다.왜 커밋하기 전에 추적되는 파일을 추가해야합니까?

여기에 내가 뭘 내용은 다음과 같습니다

  1. 는 GitHub의에 새 저장소를 생성합니다. 그것은 "표준"C# .gitignore 파일을 만드는 것을 제안합니다. 나는 위대하게 들리므로, 그렇다고 말합니다.
  2. 저장소와 함께 작성된 Readme 및 .gitignore가 있습니다.
  3. 내 컴퓨터에이 복제본을 사용합니다. git clone [repo location] [local folder]
  4. 무시한 파일과 폴더를 추가하려면 .gitignore 파일을 편집합니다.
  5. git commit을 입력하면 "커미트를 위해 변경되지 않았습니다"라는 메시지가 표시되지만 .gitignore는 수정 된 것으로 나열됩니다.

그래서 궁극적으로 나는 GitHub에서 내 변경 사항을 보여주는 원점으로 커밋하고 밀어 넣습니다. 그래서 모든 것이 잘됩니다.

이것은 다소 혼란 스럽습니다. .gitignore가 추적되고 있지 않다면, 세계에서 어쩌면 git clone을 사용하여 어떻게 풀 렸을까요? 변경을 적용하기 전에 수동으로 추가해야하는 이유는 무엇입니까?

답변

8

이것은 저장소가 어떻게 자식 전망이다. 작업 디렉토리에는 모든 파일이 있으며, 일부 커밋에서 체크 아웃되며, 아마도 수정 될 수 있습니다. 준비 영역은 커밋 할 파일을 추가하지만 아직 커밋되지 않은 파일입니다. git에서는 커밋 할 대상을 선택할 수 있기 때문입니다 (예 : svn과 달리 수정 된 내용은 커밋합니다).

this article은 에 중점을두고 있지만 git 작동 방식에 대한 개요를 제공합니다.

repository --- staging area --- working directory 
    |     |     | 
    |     |     | 
    |    Check out    | 
    |-------------------------------------->| 
    |     |     | 
    |     |   add  | 
    |     |<-------------------| 
    |     |     | 
    |  commit  |     | 
    |<-----------------|     | 

체크 아웃이 아주 분명하다 : 여기

그것의 작은 사진입니다. 두 번째 두 개는 준비 영역에 선택적으로 파일을 추가 한 다음 커밋한다는 것을 의미합니다. 예를 들어 :

$ touch file1 file2 file3 file4 # modify files 
$ git add file1 
$ git add file2 
$ git commit 

은 또한 수정 file1file2file3 불구하고 file4 커밋합니다.

때로는 원하는 모든 것을 커밋하는 것이 좋습니다.

$ touch file1 file2 file3 file4 # modify files 
$ git commit -a 

git commit-a 옵션이 자동으로 주어진 커밋 수정 된 모든 파일을 추가합니다 : 그것은에 대한 바로 가기가 있습니다.

git add -p에 의해 수행되는 파일 부분을 스테이지 할 수도 있습니다.이 패치는 기본적으로 커밋 패치를 보여 주며, 변경 내용을 선택하고 무엇을 변경하지 않을지 선택할 수 있습니다. 나중에 git commit을 사용하면 준비된 항목을 커밋 할 수 있습니다.

+0

위의 설명과 기사는 많은 도움이되었습니다. (이 말과 함께 제가'자식 재설정 (git reset) '에 대해) –

+0

알아요? 'git reset'은 매우 혼란 스러울 수 있지만 그 기사는 정말 간단합니다. – Shahbaz

+0

특히 준비 영역이없는 svn 백그라운드에서 발생합니다. 그러나 매우 시원합니다. –

6

이것은 .gitignore과 관련이 없습니다. 변경 내용을 자동으로 커밋하는 git commit -a을 사용하지 않는 한, 커밋하기 전에 항상 git add을 사용하여 수정 된 파일을 스테이지해야합니다. 저장소에서

repository --- staging area --- working directory 

, 당신이 얻을 모든 것을 모든 지역 지점에 최선을 다하고 있습니다 또는 fetch 원격 지사 에드 :

More information about tracking and staging in the Git book.

관련 문제