git에 대한 질문...

piterony의 이미지

git에 대해서 궁금한 점이 많이 생겨서 질문을 드리는데요.

1. 로컬에서 새로운 branch를 만들경우.. 파일을 통째로 복사하는 것인가요?
예를 들면 1기가 정도의 파일들이 브랜치로 관리 되고 있다가 새로운 브랜치를 만들면 그것은 파일을 통째로 복사해서 총 2기가를 관리해야 하는 것인가요?

2. 이 부분을 공부하면서 압축된 snapshot 단위로 저장을 한다고 써있던데.. 그래서 통째로 저장해도 2배가 되는 것이 아니고 최소한의 용량으로 저장이 되는 것인가요?
snapshot에 대한 개념도 정확히 이해가 안되서 전체적인 개념이 잡히지 않는거 같습니다... ㅠ ㅠ

3. 조금 더 자세히 궁금한 것이 있습니다. 책을 보면. 파일이 존재하는 그 순간의 snapshop을 저장하고
달라지지 않은 파일은 링크만 저장한다라고 되어 있습니다.
그러면 만약 100개의 파일이 있는데 100개가 전부 조금씩 수정되었다면 100개를 전부 다 저장할텐데
100개의 파일의 크기가 1기가라면 다시 100개 다 저장하는 순간 2기가 되는 건가요??

조금이나마 조언을 주실 수 있으신 분들의 친절한 댓글을 부탁드립니다 ^^

oosap의 이미지


http://dogfeet.github.com/articles/2012/progit.html

http://marklodato.github.com/visual-git-guide/index-ko.html

책을 보신다고 하셨는데 혹시 위의 Progit 을 보고 계신가요?
git 에 대한 가장 좋은 래퍼런스 인 것 같습니다. 그 아래의 비주얼 깃 래퍼런스도 눈으로 보면서 이해할 수 있어서 좋은 것 같구요....

답변은 못드리고 대신 참고링크만 드리고 갑니다..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

oosap의 이미지

1. 브랜치를 하면 모든 파일이 통째로 복사되는가? 아닙니다. 브랜치를 하면 일종의 포인터가 하나 생성되기만 할 뿐이라고 읽었습니다.

2. 3. 은 제가 알려드린 래퍼런스 문서에 잘 설명이 되어있습니다. 저도 아직 그부분까지 읽어보지 못해서요.. 이 자세한 내용은 Progit 에서도 뒤쪽 챕터에 나와있습니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

javarouka의 이미지

커맷 객체의 SHA-1해시값 40바이트에 줄바꿈 문자 1바이트 해서 41바이트의 작은 파일이라고 들었습니다.
단순히 저장소의 특정 커밋을 가르키는 개념이라고 하네요.

익명 사용자의 이미지

저도 잘은 모르지만 아는 바로 설명해 보자면...

1. 로컬에서 새로운 branch를 만들경우.. 파일을 통째로 복사하는 것인가요?
예를 들면 1기가 정도의 파일들이 브랜치로 관리 되고 있다가 새로운 브랜치를 만들면 그것은 파일을 통째로 복사해서 총 2기가를 관리해야 하는 것인가요?
>> 아닙니다.
git는 버전1의 파일, 버전2의 파일을 diff만 저장하는 게 아니라, 버전1의 파일, 버전2의 파일을 모두 그대로 저장하고, 버전2 커밋은 버전2의 파일을, 버전1 커밋은 버전1의 파일을 가리킵니다. 버전2로 올라가면서 내용이 바뀌지 않은 파일은 버전1과 버전2 커밋이 같은 파일을 가리키게 되겠죠(이때문에 각 커밋은 스냅샷이라는 표현을 씁니다).
브랜치는 특정 커밋에의 레퍼런스이며, 사용자가 현재 위치하는 브랜치에서 새로운 커밋을 하게 되면 현재 위치하고 있는 브랜치만 레퍼런스를 최신 커밋에로 갱신합니다. 때문에, 새로운 브랜치를 만들면 같은 커밋을 가리키는 레퍼런스가 하나 추가될 뿐입니다. 따라서 용량이 두배가 되지는 않고, javarouka 님께서 설명해 주셨듯 레퍼런스 하는 커밋의 이름 정도의 작은 용량만 추가됩니다.

2. 이 부분을 공부하면서 압축된 snapshot 단위로 저장을 한다고 써있던데.. 그래서 통째로 저장해도 2배가 되는 것이 아니고 최소한의 용량으로 저장이 되는 것인가요?
snapshot에 대한 개념도 정확히 이해가 안되서 전체적인 개념이 잡히지 않는거 같습니다... ㅠ ㅠ
>> git은 diff가 아니라 전체 파일을 저장하는 만큼, 저장용량이 여타 vcs에 비해 커지므로, 일정 주기로 내부적으로, 또는 사용자 명령에 직접 파일을 압축 및 diff만 보관하는 식으로 정리합니다.
브랜치를 새로 만들 때 용량이 두배가 되지 않는 이유는 1번 답에서 설명한 내용을 참고하시면 될 것 같습니다.

3. 조금 더 자세히 궁금한 것이 있습니다. 책을 보면. 파일이 존재하는 그 순간의 snapshop을 저장하고
달라지지 않은 파일은 링크만 저장한다라고 되어 있습니다.
그러면 만약 100개의 파일이 있는데 100개가 전부 조금씩 수정되었다면 100개를 전부 다 저장할텐데
100개의 파일의 크기가 1기가라면 다시 100개 다 저장하는 순간 2기가 되는 건가요??
>> 맞습니다.
하지만, 2의 답변에서 설명드렸듯, 일정 기간별로 필요하다 싶으면 git가 내부적으로 압축 및 diff, 정리해서 내부 파일을 관리하므로 추후 내부적으로 또는 사용자 명령으로 정리를 수행하게 되면 2기가를 온전히 쓰진 않습니다.

익명 사용자의 이미지

앞서 댓글 단 익명사용자입니다.
큰 의미로는 틀리지 않지만, 2, 3 질문에 대해 설명이 조금 잘못됐네요.
git는 사용자가 커밋한 파일을 내부적으로 저장해 두는데, 이 때 파일의 내용은 zlib으로 압축해 저장합니다.
따라서, 2의 답변은 큰 의미는 맞습니다만, 3의 경우, 온전히 2기가가 되진 않을테고, 압축한 용량만큼이 추가가 되겠죠. 이후 git에 의해 내부 추가 정리가 이루어지면 용량이 추가로 줄어들 테구요.

익명 사용자의 이미지

대부분의 SCM 관리 프로그램들은 diff만을 저장하는 방식입니다.
하지만 이렇게 되면 일정 변경이력이 늘어나게되면 애로가 꽃피는 상황이 많아집니다.
따라서 일부 SCM관리 툴들은 diff와 함께 전체 파일을 주기적으로(?) 같이 저장하는 방식을 쓴다고 합니다.

이렇게 알고있는데 git이나 mercurial 등등이 diff와 함께 파일 전체를 별도로 저장하는 방식을 쓴다고 알고있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.