git에서 'stage'는 무엇을 의미합니까?


315

나는 행동에 사용 된 단어의 의미를 찾을 수 없으므로 git을 이해하기가 어렵습니다. 'stage'의 의미에 대한 사전을 확인했으며 소스 제어 개념과 관련된 의미는 없습니다.

자식의 맥락에서 '무대'는 무엇을 의미합니까?



11
Git에는 실제로 자체 어휘가 있습니다. 그리고 모든 수업은 특별한 어휘로 구성되어 있기 때문에 시작하기가 어렵습니다. "무대"는 git add file.ext특정 파일에 대해 수행 하거나 git add .수정 및 추적되지 않은 모든 파일 에 영향을주는 것입니다. 이런 방식으로 추가 된 파일은 "스테이징"된 것으로 다음 "커밋"에 포함됩니다. 커밋은로 만든 작업의 ​​스냅 샷입니다 git commit -m "I wrote something".
Jonatan Öström

11
Git은 개념적인 튜토리얼이 없기 때문에 이해하기 어렵습니다. 모두 불필요한 세부 사항을 겪습니다.
Xaqron

2
이 질문에서 "용어"태그를 제거 하시겠습니까? 나에게 완벽하게 유효한 태그 인 것 같습니다.
Philip Kendall

어떤 이유로 스테이징의 중요성을 이해할 수있는 가장 좋은 방법은 Quora의 다음 답변입니다. qr.ae/TbSK2I
Lamar

답변:


310

하기 위해 무대 파일을 커밋에 대한 미세하게 준비를하는 것입니다. 인덱스가있는 Git을 사용하면 마지막 커밋 이후에 수행 한 변경 사항 중 특정 부분 만 커밋 할 수 있습니다. 두 가지 기능에 대해 작업하고 있다고 가정 해 보겠습니다. 하나는 완료되었으며 일부는 여전히 수행해야합니다. 커밋하고 집에 가고 싶습니다 (마침내 5시!).하지만 아직 완료되지 않은 두 번째 기능의 일부를 커밋하고 싶지 않습니다. 아는 부분은 첫 번째 기능에 속하고 커밋합니다. 이제 커밋은 첫 번째 기능을 수행 한 프로젝트이며 두 번째는 여전히 작업 디렉토리에서 진행중인 작업입니다.


5
좋은 설명입니다. 커밋이 로컬 (처음에는)이기 때문에 분산 된 git은 분명히 기능을 모두 커밋 할 수 있습니다 . 여전히 수정 사항을 기능 당 하나의 커밋으로 나누고 다시 준비하는 것이 좋습니다.
sleske

77
왜 준비해야하는지 모르겠습니다. 관련 파일 만 커밋하여 HG 또는 SVN 으로이 작업을 수행 할 수 있습니다. 이 기능은 주로 커밋 대상에 대한 확인란을 선택하기 어려운 명령 줄 작업을 고집하는 사람들을 돕기 위해 설계된 것 같습니다.
jiggy

78
@jiggy git를 사용하면 파일의 일부 를 준비 할 수 있습니다 . 파일을 준비하고 추가로 수정 한 다음 준비 상태를 커밋 할 수도 있습니다. Subversion에서는 그렇게 할 수 없습니다.
이즈 카타

4
@jiggy SVN에는 커밋 할 파일 / 파트를 선택하는 시간과 커밋 메시지 작성을 마칠 때 사이에 커밋하기로 선택한 파일 / 파트를 기록하는 것이 있습니다. 명시 적으로 언급되지 않았으며 저장소의 실제 부분이 아닌 SVN 클라이언트에서 구현 될 수 있으며 메모리의 일부 플래그 일 수 있지만 SVN의 단계입니다. 나는 HG를 보지 않았지만 같은 일을한다고 생각합니다. git과의 차이점은 git이이를 인식하여 디스크에 기록하고 사용자가 직접 얻을 수 있다는 것입니다.
8bittree

7
그림의 두 번째 화살표 "스테이지 파일"이 잘못 될 수 있습니다. "단계 덩어리"가 더 정확할 수 있습니까?
Ida

137

지금까지 모든 사람들이 그것을 "공식적인"방법으로 대답 했으므로, 은유의 힘으로 학습을 향상시키기위한 대안으로 이것을 해 보도록하겠습니다.

그래서 준비 영역은 같은 것입니다 :

  • 커밋하려는 파일 캐시
  • 일련의 튜브가 아니라 실제로 덤프 트럭으로 적재 한 작업 물을 저장소로 옮길 준비가되었습니다.
  • 선택한 파일이 마법사를 사용하여 돌로 바뀌고 변덕스러운 저장소로 마술처럼 옮겨 질 수있는 마법의 장소
  • 파일이 행복하게 저장소로 이동하는 노란색 벽돌 도로 (또는 되돌리려면 떨어지십시오)
  • 파일이 시멘트 신발 한 켤레를 받아 저장소 바다에 던져지는 항구의 가상 장소
  • 도서관의 리셉션 데스크에서는 도서관 사서가 도서관에 제출할 수 있도록 파일을 보관합니다.
  • 침대 아래에 물건을 넣기 전에 물건을 넣는 상자, 침대는 이전에 넣은 상자의 저장소입니다
  • 파워 로더를 사용하여 저장소웨어 하우스로 들어가기 전에 파일로드 베이
  • 전기 드립 커피 메이커의 필터, 파일이 커피 가루와 같으면 커밋 된 파일은 추출 커피입니다.
  • 금고 옆에있는 Scrooge McDuck의 사무실에서
  • 애완 동물 가게, 애완 동물을 집으로 데려 오면

그것은의 마법 !


유추를 사랑하십시오. 새싹가는 방법 ^ _ ^
Musa Al-hassy

마지막 비유를 좋아하십시오.
meTchaikovsky

35

스테이징은 git의 커밋 프로세스 이전 단계입니다. 즉, git의 커밋은 준비 및 실제 커밋의 두 단계로 수행됩니다.

변경 세트가 스테이징 영역에있는 한 git을 사용하면 스테이지 파일을 다른 버전의 스테이징 파일로 바꾸거나 스테이징에서 변경 사항을 제거하는 등 원하는대로 편집 할 수 있습니다.

깨진 은유 시간 :

이전 아파트에서 새 아파트로 물건을 가져 오기 위해 무버를 호출하는 시나리오를 고려하십시오. 그렇게하기 전에 물건을 다니고, 가지고 갈 물건과 뭘 버릴지를 결정하고, 가방에 싸서 메인 복도에 두십시오. 무버는 단순히 와서 복도에서 (이미 포장 된) 가방을 가져 와서 운반합니다. 이 예에서, 이동자가 물건을 얻을 때까지 모든 것이 준비됩니다. 무엇이 어디로 가고, 어떻게 포장 하는가 등을 결정합니다 (예를 들어, 이동자가 물건을 가져 오기 전에 물건의 절반을 버릴 것이라고 결정할 수 있습니다-그 부분 임) 준비 중).

기술적 관점에서, 스테이징은 모든 작업을 실패 할 수있는 (스테이징) 및 실패 할 수없는 (커밋)으로 분할하여 트랜잭션 커밋을 지원합니다.

준비가 완료되면 git의 커밋이 트랜잭션 방식으로 구현됩니다. 준비의 여러 단계가 실패 할 수 있습니다 (예 : 커밋해야하지만 HDD 용량이 99.9999 %이며 git에 커밋을 수행 할 공간이 없습니다). 이는 스테이징에서 실패하고 (저장소가 부분 커밋으로 손상되지 않음) 스테이징 프로세스는 커밋 히스토리에 영향을 미치지 않습니다 (오류의 경우 리포지토리가 손상되지 않음).


... 그리고 지금까지 너무 적은 표.
ojonugwa ochalifu

26

파일을 준비하는 것은 커밋을 준비하는 것입니다. git은이 동작을 사용자 정의 컨트롤에 노출 시키므로 부분 커밋을 만들거나 파일을 수정하고 파일을 준비한 후 다시 수정하고 원래 수정 사항 만 커밋하거나 되돌릴 수 있습니다.

준비는 당신에게 정확하게 세밀하게 제어 할 수 있습니다 방법 은 버전 제어에 접근하고자합니다.


19

다른 훌륭한 답변을 추가하기 위해 "stage"의 이름은 다음과 같습니다.

사전에서 스테이지의 의미를 확인했으며 소스 제어 개념과 관련된 의미는 없습니다.

영어에서 "무대"는

(공개 행사) 조직 및 참여 : UDF 지지자들이 소피아에서 시연

( http://oxforddictionaries.com/definition/stage )

git 기능의 이름 "스테이징"은 다음과 같은 의미에서 파생됩니다. 스테이징 할 때 커밋을 준비하고 구성합니다. 물론 커밋은 성능과 완전히 동일하지 않습니다, 그러나 그것은 이다 VCS는 :-)에서 중요한 이벤트입니다.


3

같게. 또한 "프로세스 또는 개발의 시점, 기간 또는 단계"
Darien

또한 '스테이징 서버'는 개발과 프로덕션 사이의 서버를 설명하는 데 사용되는 일반적인 용어입니다.
Eternal21

4

대부분의 다른 버전 제어 시스템에는 작업 사본 (현재 사용중인 폴더 / 파일)과 데이터 저장소 (버전 제어가 변경 사항을 압축하고 저장하는 방법을 결정하는 위치)와 같은 두 가지 데이터 저장 위치가 있습니다. Git에는 스테이징 영역 (또는 인덱스)의 세 번째 옵션이 있습니다. 기본적으로 어떤 변경 사항을 배송할지 결정하는 로딩 도크입니다.

출처 : http://gitready.com/beginner/2009/01/18/the-staging-area.html


1
이것은 이전의 6 가지 답변보다 실질적인 것을 추가하지 않는 것 같습니다
gnat

Index를 언급합니다. 그리고 매우 철저한 기사를 언급합니다. 공감. BTW, 위의 일부 답변은 단지 농담입니다.
Gangnus

1

"단계"는 파일 체크인 프로세스에서 기술적으로 필요한 중간 단계입니다. 즉, 저장소에 추가 할 변경 사항을 수집합니다. Git의 저자는 다른 VCS가 커밋 프로세스의 일시적인 부분으로 만드는 경우이 단계를 가시적이고 지속적으로 만들도록 선택했습니다. 따라서 git이 제공하는 옵션 일뿐이므로 왜 그렇게 할 수 없습니까?

내가 보는 방식으로 git "stage"는 다른 VCS가 제공하지 않는 주요한 점은 파일을 체크 포인트하는 데 사용할 수 있다는 것입니다. 효과적으로 이름이 지정되지 않은 주석 처리되지 않은 로컬 커밋으로 모든 작업을 완료하고 저장소에 영구적으로 커밋하고 로컬 리포지토리에 전혀 저장하지 않는 중간 단계를 제공합니다.

예를 들어, 부분적으로 완성 된 기능이 있다고 가정 해 봅시다. 안정적인 상태이며 모든 테스트를 통과하고 생산에 들어갈 수 있지만 더 많은 작업이 필요합니다. 모든 변경 사항을 준비한 다음 기능에 대한 작업을 계속할 수 있습니다.

나중에 준비한 것을 커밋하고 (원격 저장소에 커밋을 푸시) 스테이징 영역에 새로운 변경 사항을 추가 한 다음 한 번에 커밋하거나 새 변경 사항 만 실행 취소 할 수 있습니다. 작업 디렉토리를 변경을 스테이징했을 때의 상태로 되 돌리십시오.

실제로 스테이징 영역을 완전히 건너 뛰고 스테이징 영역에 유용한 개념이없는 경우 -a옵션을 사용하는 것이 git commit가능합니다. 많은 사람들이 준비를 건너 뛰고 GUI 도구도 일반적으로이를 허용합니다.


"다른 VCS는 그렇지 않습니다" -어떻게 생각하십니까? Perforce의 선반은 당신이 묘사 한 것을하고 있으며, 종과 호루라기가 거의 없습니다
gnat

1
@gnat 예, 물론 많은 다른 VCS가 스테이징과 같은 것을 제공합니다. "기타 VCS"는 git 's stage와 같은 것이없는 다른 VCS를 의미합니다. 왜냐하면 OP가 참조한 것이기 때문입니다.
Old Pro

나는 그것이 준비가 전혀 존재 이유 (인 명확히 유일한 사람이기 때문에, 위의 모든 것보다 상당히 더 나은이 답을 발견 기술적 요구 ), 그 기원에 대한 설명 ( 망할 놈의 저자는이 단계를 볼 수 있고 지속하기로 결정했습니다 추가) 내가 개인적으로 그것에 대한 좋은 정의라고 생각 하는 것 ( 중간, 명명되지 않은, 주석 처리되지 않은 로컬 커밋 ). 그러나 스테이징의 기원에 대한 진술을 인용하여 개선 될 수 있다고 생각하고 기술적으로 필요한 이유에 대해 더 자세히 설명 합니다 . @OldPro
alexlomba87

-1

내 이해는 로그인 기능을 개발 중이며 5 단계를 연속적으로 완료해야한다고 가정합니다. 따라서 여기에서 스테이징을
수행하면 1 단계와 같은 단계를 수행하는 데 도움이됩니다 .
2 단계로 완료되면 이제 1 단계와 2 단계가 모두 올바른 단계입니다.
3 단계로 엉망으로 문제 없음 체크 아웃 최신 단계 단계 2 단계
와 동일한 방식으로 5 단계를 모두 완료하면 기능이 완료되었다는 의미가 커밋을 수행합니다.


이것은 이전의 9 가지 답변에서 제시되고 설명 된 포인트를 넘어서는 실질적인 내용을 추가하지 않는 것 같습니다
gnat

네 당신 말이 맞아요, 설명을 간단하고 달콤하게 만들려고
했어요

그리고이 개념을 실제로 사용하고 싶다고 느끼는 점을 설명하려고했습니다.
palash140

여기에서 토론을 살펴보십시오. 두 번째 TL; DR 답변이 허용됩니까? (FWIW는 이전 답변과 비교할 때 간단하지도 않고 달콤하지도 않습니다)
gnat

감사합니다. 질문 할 것이 있습니다. 나는 많은 대답을 보았고 대부분은 너무 복잡합니다. 그렇지만 정확하지만 한 번에 소화하기가 어렵습니다. 간단한 방법으로 아무것도 설명 할 수 없다면 제대로 배우지 못했거나 어떻게 알지 못합니다 그것을 사용하십시오. 요약이나 간단한 대답 방법을 사용하는 것이 좋지 않습니다.
palash140
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.