2014-10-04 1 views
10

나는 매우 신이 롭고 stashing에 관한 질문이있다. 지사에서 일했지만 지점을 맡을 수있는 위치에 도달 할 수없는 경우 stashing을 사용하는 것이 옳습니다. 스태킹에 대한 내 질문은 다음과 같습니다.git에서 저장하는 저장 용량은 얼마나 되나요?

  1. 저장되는 은닉 수는 몇 번입니까?
  2. 이 은닉은 얼마나 오래 저장됩니까?
  3. 컴퓨터를 다시 부팅 할 때 변경 내용이 손실되도록 작업을 임시로 저장합니까?

누군가가 신속하게 명확히하는 것이 도움이된다면 정말 감사 할 것입니다.

+2

1. 귀하가 만드는만큼. 2. *, * pop *, * clear *을하지 않는 한. 3. 아니오. 재부팅 후에는 여전히 액세스 할 수 있습니다. http://git-scm.com/book/en/Git-Tools-Stashing – Jubobs

+0

Downvoter를 참조하십시오. 질문은 생각보다 미묘 할 수도 있습니다 ... – Jubobs

+1

git에서는 거의 불가능한 위치에 있습니다. 범하다. 나는 개인적으로 그 모든 유용한 것으로 은닉되어 있지 않습니다. –

답변

15

1 - 몇 개의 은닉이 저장됩니까?

은신처는 공기 중에 나타나지 않습니다. 당신은

git stash 

또는 동등

git stash save 

그래서 얼마나 많은 저장됩니다를 사용하여, 그것들을 만드는 경우에만? 최대한 많이 만듭니다.

2 -이 은닉은 얼마나 오래 저장됩니까?

이 질문은 무죄로 보이지만 답변은 실제로 매우 미묘합니다. 여기서 고려해야 할 두 가지 측면이 있습니다. 1) stash reflog 및 2) 저장소의 객체 데이터베이스. 에 해당 하나

당신이 감춰을 만들

, 힘내

  • 는 숨김 reflog에 항목, (당신이 --include-untracked 플래그를 사용하는 경우 세)
  • 두 가지를 생성 저장소 데이터베이스의 객체를 저지를 추가 작업 트리의 WIP (진행중인 작업) 및 준비 영역 (일명 색인)의 상태에 해당하는 또 다른 작업입니다.

편집 : 해당 커밋 개체는 진품 커밋이며 확인하려면 git cat-file -t을 실행하여 확인할 수 있습니다. 그들은 단지 어떤 지회에서나 도달 할 수 없다. torek's comment을 참조하십시오.

기본적으로 Git의 가비지 수집은 90 일이 넘은 reflog 항목을 자동으로 삭제합니다. 당신은, 힘내 자체에 숨겨 놨다는 삭제되지 않습니다 위에서 설명한 가비지 수집 메커니즘 이외의

git config gc.refs/stash.reflogexpire <lifetime> 

을 실행하여, 숨김 reflog 항목에 대해 다른 "수명"을 지정할 수 있습니다; 감춰 사용하여, 한 당신이 그것을하지 자발적으로

  • 드롭을로 (이상 90 일) 당신의 로컬 저장소에 남아에서 지정된 숨김 항목을 삭제

    git drop <stash-reference> 
    

    숨겨둔 reflog; 다음 지정된 은닉을 적용하고

    git pop <stash-reference> 
    

    를 사용

  • 팝업 그것을는 숨김 reflog로부터 대응하는 엔트리를 삭제한다; 또는

  • 는 숨김 reflog의 모든 항목을 삭제 실행은

    git stash clear 
    

(하나 조심).

그러나이 세 가지 작업은 은닉 reflog에만 영향을줍니다. 특히, 관련 WIP 및 색인 객체가 저장소의 데이터베이스에서 즉시 삭제되지는 않습니다. 단지 그 객체들을 도달 할 수 없도록 만듭니다. 후자는 결국 "저장소 림보 (residence limbo)"에 남아있을 것이고 결국에는 쓰레기 수거되어 "진정한 죽음"을 당할 것입니다. 유용한 것은 알고 있어요

: 실수 드롭 은닉, 당신은 아직도 당신이 두 개의 개체의 SHA를 기억하거나 식별 할 수 있다면, 당신의 repo의 내장에서 검색 할 수있을 경우 (WIP 및 색인).

3 - 컴퓨터를 재부팅 할 때 변경 사항이 손실 될 수 있도록 작업을 임시 저장합니까?

번호는 다른 모든 커밋 개체와 다르지 않습니다. 다시 부팅해도 아무런 영향을 미치지 않습니다.

+3

사이드 노트 : 그들은 단지 "커밋과 같은 객체"는 아니지만 사실 커밋입니다. 단지 커밋되지 않은 커밋 일뿐입니다. 두 개의 커밋과 유사한 객체를 만드는 대신 "두 개의 커밋을 만듭니다"라고 말하고 싶습니다. 그리고,'stash' ref는 특별한 특별한 디폴트 만료 시간을 "never"로 가지고 있습니다. – torek

+1

@torek'git cat-file -t'를 다시 한 번 확인해야했지만, 커밋중인 객체에 대해서는 당신이 맞습니다. 그러나 문서에서'stash' ref가 만료되지 않는다고 언급 한 곳은 어디입니까? – Jubobs

+5

이 문서는 성능이 좋지 않을 때 문서화되었으며 아마도 릴리스 노트 이외에는 전혀 없을 것입니다. 'if (! strcmp (ref, "refs/stash")) {'만기를 "never"로 설정하는 코드와 주석 : "만약 unconfigured이면, 은신처는 결코 만료시키지 마십시오. " 만기가 "never"로 설정되기 전에, 그 if 코드 안에있는 추가 코드 (여기에 표시되지 않음)가 테스트 중인지 전혀 명확하지 않습니다. – torek

3

힘내 자국은 하드 디스크가 죽을 때까지 저장됩니다. 보통 커밋과는 다른데, 이것은 보통 git push을 통해 다른 컴퓨터로 전송되므로 하드 디스크 오류가 지속됩니다.

당신은 원하는만큼의 은닉을 할 수 있습니다. git stash drop 또는 git stash clear을 실행하여 기분이 좋으면 오래된 것을 제거하십시오 (해당 문서 참조).

관련 문제