10년 전 Git 어땠어요?

16590 단어 GitGitHub

Git계의 #10 YearChallenge.



photo by Chad Horwedel
얼마 전 SNS에서 화제가 되었다#10YearChallenge.이 말을 보니까...약간, 프로그래밍 근처의 타임머신은 Git의 존재를 잊어주세요!그리고그래서 Git도 도전했다#10YearChallenge.10년 전 Git이 어떤 모습인지 보러 가자!

어떻게 10년 전으로 돌아갑니까?


아, 어떻게 10년 전으로 돌아가지?Git가 어떤지 알고 싶으면 clone Git의 원본 코드부터 시작하세요.
$ git clone [email protected]:git/git.git
보시면 아시겠지만 Git 자체도 Git에서 버전 관리를 하고 있습니다!그러면 이 소스 코드에서 10년 전에 제출한 SHA1 산열 값을 찾아야 합니다.따라서 이제 clone의 항목을 열고 다음 명령을 실행합니다.
$ cd git
$ git rev-list master -n 1 --before="2009-01-18"
이 명령의 -n 1 은 하나의 결과만 표시하도록 지정됩니다.--before 섹션에서 시간을 지정합니다.이번에는 10년 전 오늘 이전의 날짜를 약속한 것(※ 번역자 주: 이 날짜는 원문의 중국어판 보도에 따라 쓰여진 날짜)에 따라 하나만 찾아내면 된다.명령을 실행하면 SHA1 해시 값은 a83c88525ed6d8d940f8cf7f21e92b189f7844e3 입니다.--before 이후 시간이 변경되면 SHA1 산열 값도 다르므로 주의해야 합니다.
그럼 SHA1 해시치를 발견했기 때문에 다음은 룰라를git checkout 명령으로 과거로 거슬러 올라가자.
$ git checkout a83c88525ed6d8d940f8cf7f21e92b189f7844e3
참고로 두 줄을 그리는 것이 귀찮다면 이렇게 한 줄로 줄일 수도 있다.
$ git checkout `git rev-list master -n 1 --before="2009-01-18"`

10년 전 Git 어땠어요?


만약 Git의 소스 코드를 얻을 수 있다면,build를 시도해 보세요!(설치할 필요 없이 소스 코드 디렉터리 build에서 가능):
$ make configure
$ ./configure
$ make
make가 성공하면 이 디렉터리는 많은 git-부터 시작하는 실행 파일을 만들 것입니다.(make가 실패하면 Stackoverflow에 오류 메시지를 던져 해결 방법을 찾습니다.)

버전


2009년:
$ git --version
git version 1.6.1.203.ga83c8
2019년:
$ git --version
git version 2.19.1
버전 번호의 주요 버전은 1부터 2까지지만 10년이 지났기 때문에 주요 버전이 1부터 2까지라도 불가사의한 것은 없다.

소스 코드 행 수


2009년:
$ cloc *

github.com/AlDanial/cloc v 1.80  T=1.12 s (785.9 files/s, 272731.4 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                               241          12701          11220          82408
Bourne Shell                    416          12474           5956          73787
Perl                             39           5598           4755          35831
PO File                          17           5420           5772          15236
Tcl/Tk                           38           1422            322           9433
Gencat NLS                       13              0              0           5178
C/C++ Header                     82            990           1206           3814
Python                            5            670            272           2939
make                              9            293            263           1881
Lisp                              3            241            206           1808
Bourne Again Shell                1            105             65           1626
ASP.NET                           8            114              0            799
CSS                               2            142             15            655
m4                                1             30              7            574
Assembly                          2             51            158            198
XSLT                              3              5              4             47
JSON                              1              0              0             39
JavaScript                        1              2              2             30
YAML                              1              0              0             21
DOS Batch                         1              0              0              1
--------------------------------------------------------------------------------
SUM:                            884          40258          30223         236305
--------------------------------------------------------------------------------
프로젝트의 총 인코딩 줄은 23만 줄로 대부분 C, Shell Script, Perl로 전체 인코딩 줄의 8할을 차지한다.
2019년:
$ cloc *

github.com/AlDanial/cloc v 1.80  T=2.91 s (667.0 files/s, 303302.0 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
C                                  443          31960          27293         193716
Bourne Shell                      1030          31560          12338         190348
PO File                             48          58088          63656         166792
Perl                                80           5251           4956          29710
C/C++ Header                       209           4239          10230          16966
Tcl/Tk                              40           1537            409          10444
Python                               7           1603           1581           5985
make                                24            715            782           3565
Bourne Again Shell                   1            241            332           2489
m4                                   2            123             14           1161
ASP.NET                              9            141              0            942
CSS                                  2            169             30            783
JavaScript                           7            203            649            761
Go                                   4             53             84            421
sed                                  1             22            158            189
zsh                                  1             37             17            189
PHP                                  2             44             82            123
XSLT                                 8             19             33             98
Assembly                             1             26            115             83
Markdown                             2             14              0             64
diff                                18              0             36             64
C Shell                              1             18             63             45
Ruby                                 1              4              0             24
Windows Resource File                1              1              0             21
Lisp                                 2              0              0             12
-----------------------------------------------------------------------------------
SUM:                              1944         136068         122858         624995
-----------------------------------------------------------------------------------

눈에 띄는 것은 전체 항목이 C 언어와 Shell Script에 의해 점유되고 코드 줄 수가 약 2배로 팽창한 것과 비교하면 Perl의 코드 줄 수가 줄어들었는가이다.이게 Perl 때문에 어려운 건지 모르겠지만...
게다가 Git 버전 1은 모두 C 언어로 쓰여 있고 848행 소스 코드만 있습니다.
$ cloc *

github.com/AlDanial/cloc v 1.80  T=0.02 s (625.0 files/s, 67245.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                8            115             59            769
C/C++ Header                     1             17             23             53
make                             1             14              0             26
-------------------------------------------------------------------------------
SUM:                            10            146             82            848
-------------------------------------------------------------------------------

Git 명령 수


Git에 어떤 명령이 있는지 알고 싶으면 git help –a 쿼리를 사용합니다.
2009년
add                    fast-import            merge-resolve          rev-parse
add--interactive       fetch                  merge-resolve.sh       revert
add--interactive.perl  fetch--tool            merge-subtree          rm
am                     fetch-pack             merge-tree             send-email
am.sh                  filter-branch          mergetool              send-email.perl
annotate               filter-branch.sh       mergetool.sh           send-pack
apply                  fmt-merge-msg          mktag                  sh-setup
archimport             for-each-ref           mktree                 sh-setup.sh
archimport.perl        format-patch           mv                     shell
archive                fsck                   name-rev               shortlog
bisect                 fsck-objects           pack-objects           show
bisect.sh              gc                     pack-redundant         show-branch
blame                  get-tar-commit-id      pack-refs              show-index
branch                 grep                   parse-remote           show-ref
bundle                 hash-object            parse-remote.sh        stage
cat-file               help                   patch-id               stash
check-attr             http-fetch             peek-remote            stash.sh
check-ref-format       http-push              prune                  status
checkout               imap-send              prune-packed           stripspace
checkout-index         index-pack             pull                   submodule
cherry                 init                   pull.sh                submodule.sh
cherry-pick            init-db                push                   svn
clean                  instaweb               quiltimport            svn.perl
clone                  instaweb.sh            quiltimport.sh         symbolic-ref
commit                 log                    read-tree              tag
commit-tree            lost-found             rebase                 tar-tree
config                 lost-found.sh          rebase--interactive    unpack-file
count-objects          ls-files               rebase--interactive.sh unpack-objects
cvsexportcommit        ls-remote              rebase.sh              update-index
cvsexportcommit.perl   ls-tree                receive-pack           update-ref
cvsimport              mailinfo               reflog                 update-server-info
cvsimport.perl         mailsplit              relink                 upload-archive
cvsserver              merge                  relink.perl            upload-pack
cvsserver.perl         merge-base             remote                 var
daemon                 merge-file             repack                 verify-pack
describe               merge-index            repack.sh              verify-tag
diff                   merge-octopus          repo-config            web--browse
diff-files             merge-octopus.sh       request-pull           web--browse.sh
diff-index             merge-one-file         request-pull.sh        whatchanged
diff-tree              merge-one-file.sh      rerere                 write-tree
export                 merge-ours             reset
fast-export            merge-recursive        rev-list
디스플레이는 166개로 보이지만 실제로는 140개 정도다.
2019년:
add                       diff                      merge-octopus             reset
add--interactive          diff-files                merge-one-file            rev-list
am                        diff-index                merge-ours                rev-parse
annotate                  diff-tree                 merge-recursive           revert
apply                     difftool                  merge-resolve             rm
archimport                difftool--helper          merge-subtree             send-email
archive                   fast-export               merge-tree                send-pack
bisect                    fast-import               mergetool                 serve
bisect--helper            fetch                     mktag                     sh-i18n--envsubst
blame                     fetch-pack                mktree                    shell
branch                    filter-branch             mv                        shortlog
bundle                    fmt-merge-msg             name-rev                  show
cat-file                  for-each-ref              notes                     show-branch
check-attr                format-patch              p4                        show-index
check-ignore              fsck                      pack-objects              show-ref
check-mailmap             fsck-objects              pack-redundant            stage
check-ref-format          gc                        pack-refs                 stash
checkout                  get-tar-commit-id         patch-id                  status
checkout-index            grep                      prune                     stripspace
cherry                    gui                       prune-packed              submodule
cherry-pick               gui--askpass              pull                      submodule--helper
citool                    hash-object               push                      subtree
clean                     help                      quiltimport               svn
clone                     http-backend              range-diff                symbolic-ref
column                    http-fetch                read-tree                 tag
commit                    http-push                 rebase                    unpack-file
commit-graph              index-pack                rebase--helper            unpack-objects
commit-tree               init                      receive-pack              update-index
config                    init-db                   reflog                    update-ref
count-objects             instaweb                  remote                    update-server-info
credential                interpret-trailers        remote-ext                upload-archive
credential-cache          log                       remote-fd                 upload-pack
credential-cache--daemon  ls-files                  remote-ftp                var
credential-netrc          ls-remote                 remote-ftps               verify-commit
credential-osxkeychain    ls-tree                   remote-http               verify-pack
credential-store          mailinfo                  remote-https              verify-tag
cvsexportcommit           mailsplit                 remote-testsvn            web--browse
cvsimport                 merge                     repack                    whatchanged
cvsserver                 merge-base                replace                   worktree
daemon                    merge-file                request-pull              write-tree
describe                  merge-index               rerere
명령 수가 163개로 증가했습니다.
2019년과 2009년을 결합하여 새로 추가된 것만 추출하세요:
bisect--helper           check-ignore               check-mailmap             citool
column                   commit-graph               credential                credential-cache
credential-cache--daemon credential-netrc           credential-osxkeychain    credential-store
difftool                 difftool--helper           gui                       gui--askpass
http-backend             interpret-trailers         notes                     p4
range-diff               rebase--helper             remote-ext                remote-fd
remote-ftp               remote-ftps                remote-http               remote-https
remote-testsvn           replace                    serve                     sh-i18n--envsubst
submodule--helper        subtree                    verify-commit             worktree
이것은 새로 추가된 명령입니다.응, 담았다면 이 안에서 비교적 자주 사용하는 것은 worktree 정도의 물건이야.

눈금자 정보


용자가 악용을 싸우는 룰라는 중학교 때 (즉 중2병에 걸린 그 시기) 가장 배우고 싶은 주문이다.도라에몽의'임의문'과 손오공의'순간이동'을 제외하고는 룰라가 가장 편리하다.

Git의 세계에서는 그 구조를 이해하는 데 시간이 걸리면 보존점처럼, 루라처럼 가고 싶은 곳으로 갈 수 있고, 길을 잃지 않겠다고 약속한다.하지만 기본적인 기술을 익히지 못하면 저장점이 어디에 있는지 알면서도 주문을 어떻게 사용해야 하는지 알면서도 천장에 머리를 부딪혀 뾰루지가 가득할 뿐이니 기본 지식을 잘 익혀야 한다!
(오타쿠라서 오타쿠에 대한 비유만 나오는데 orz가 안 된다)

좋은 웹페이지 즐겨찾기