10년 전 Git 어땠어요?
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가 안 된다)
Reference
이 문제에 관하여(10년 전 Git 어땠어요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eddiekao/items/89e5e7db103315e65658
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ git clone [email protected]:git/git.git
$ cd git
$ git rev-list master -n 1 --before="2009-01-18"
$ git checkout a83c88525ed6d8d940f8cf7f21e92b189f7844e3
$ git checkout `git rev-list master -n 1 --before="2009-01-18"`
$ make configure
$ ./configure
$ make
$ git --version
git version 1.6.1.203.ga83c8
$ git --version
git version 2.19.1
$ 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
--------------------------------------------------------------------------------
$ 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
-----------------------------------------------------------------------------------
$ 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
-------------------------------------------------------------------------------
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
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
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
Reference
이 문제에 관하여(10년 전 Git 어땠어요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eddiekao/items/89e5e7db103315e65658텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)