2009-10-07 4 views
15

OS X 터미널 사용자식을 사용하지 않고 git 객체 및 색인을 보는 방법

이러한 파일의 내용을 일반 텍스트로 보는 방법은 무엇입니까?

+0

이 파일은 본질적으로 일반 텍스트 아니며, 등을 볼 수, 당신은 텍스트로 자신의 포맷을 변환하는 프로그램이 필요합니다. 힘내는 정확하게 그렇게하도록 설계된 구성 요소가있는 프로그램입니다. 나는 누군가가 다른 것을 쓴다면 매우 놀랄 것이다. – Cascabel

+0

개체 (특히 개체를 커밋)는 일반 텍스트로 변환되지 않으므로? –

+0

zlib (압축) 압축을 사용하여 적어도 * 압축되었습니다. –

답변

9

“Object storage format” in Git User Manual을 살펴보십시오.

zlib을 사용하는 원시 압축 데이터입니다. 'zlib1g-dev'패키지의 zpipe을 사용할 수 있습니다. the examplegcc -o zpipe zpipe.c -lz으로 컴파일하십시오. .gz 등의 표준이 아닙니다.

./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133 

인쇄 블롭의 내용 (헤더 + 데이터)는 SHA-1을 확인하려면, 당신이 파일 (myblob)에 압축되지 않은 방울을 넣어해야 할

sha1sum myblob 
+0

아쉽게도 포장 된 객체 (이 객체는 저장소에 잠시 동안있다). –

+1

개체 파일에 DEFLATE 페이로드 만 포함되어 있고 https://www.ietf.org/rfc/rfc1952.txt에 지정된 다른 메타 데이터 필드가 포함되어 있지 않으므로 'gunzip'이 작동하지 않는 이유입니다 ? –

10

일반 텍스트 형식의 커밋 또는 블롭 (파일 내용) 없이 사용하고 싶다면 리포지토리가 압축 된 경우 특히 쉽지 않을 것입니다. git을 홈 디렉토리 (또는 Mac OS X의 해당 디렉토리)에 로컬로 설치할 수 있습니까?

에 대한 형식이 인 파일은 .git/objects/ 팬 아웃 디렉토리에 저장됩니다. .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133 (팬 아웃 디렉토리 및 파일 이름 형태로 객체의 SHA-1 식별자)의 "Pro Git"책 (무료로 온라인으로보실 수 있음)과 Chapter 7.1 "How Git Stores Objects" "Git Community Book"에 있습니다.

형식입니다. 여기서 개체 집합은 .git/objects/pack/의 단일 파일에 저장됩니다. .git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.packDocumentation/technical/pack-format.txt와 "힘내 커뮤니티 도서"의 Chapter 7.5 "The Packfile"에 설명 된 (그리고 "프로 힘내"의 Chapter 9.4 "Packfiles"에서 언급 한) 당신이 .git/HEAD 파일에 먼저 살펴 것은 찾을 커밋 최신을 찾으려면


한다 현재 가지. 그것은 다음과 같은 것을 포함됩니다 :

ref: refs/heads/master 

(는 SHA-1을 포함하는 경우, 당신은 커밋 마지막의 ID로 가지고 가고, 단계를 건너 뛸 수 있습니다). 그런 다음 확인하십시오. .git/refs/heads/master을 입력하여 분기가 가리키는 위치를 찾으십시오. SHA-1 커밋을 포함합니다 (예 :

).
dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb 

가장 최근의 커밋은 아마도 느슨한 형식 일 것입니다. 이 예제에서는 .git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb 파일에 있습니다.

8

나는 다른 방식으로 질문을 해석 할 것입니다. 오브젝트 파일이 무엇인지 이해하고 싶다면 git을 사용하여 히스토리 로그를 탐색하거나 git checkout, diff 등을 사용하지 않고 git을 직접 볼 수 있습니다./04/에서 04하고 나머지 숫자 a42e의 처음 네 문자를 결합하여 파일 .git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141

명령을 실행

git show 04a42e 

를 들어

: 예를 들어.

> git show 04a42e 
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6 
Author: Alex Brown <[email protected]> 
Date: Fri Jan 8 11:02:21 2010 +0000 
a text file 

diff --git a/1.txt b/1.txt 
new file mode 100644 
index 0000000..04a42e9 
--- /dev/null 
+++ b/1.txt 
@@ -0,0 +1,3 @@ 
+Woo 
+# boo 
+# choo 

이 하나는은, 다른 물체가 인덱스 .git/index하에 저장 등

+0

이것은 * some * question : P에 대한 좋은 대답 인 것 같습니다. –

12
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'" 

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum 
4b3083256dedabd68e839d7717aa785424119990 - 
0

파일 모양, 나무, 커밋 될 수있다.

https://github.com/git/git/blob/master/Documentation/technical/index-format.txt에 지정된 이진 압축되지 않은 형식이므로 읽을 수있는 유일한 방법은 hd 같은 도구를 사용하는 것입니다.

index 파일에는 inode, 사용 권한 및 수정 시간을 포함하여 메타 데이터가있는 파일 목록이 들어 있습니다. 또한 내용으로 SHA-1이 포함되어 있습니다.이 내용은 객체로 저장되므로 git add을 실행하면 새 객체가 만들어 질 수 있습니다.

형식 필드를 필드별로 확인하려면 git init init && cd init && echo a > a && git add a, hd .git/index과 같은 간단한 테스트 저장소를 만드는 것이 좋습니다.

다음과 같은 질문이 인덱스에 더 초점을 맞추고 What does the git index contain EXACTLY?

관련 문제