λ§μ§ μ μλ Git μ μ₯μλ₯Ό νλ λ§λ€μκ³ μνΉ λλ ν 리μ Checkoutλ νλ€. μ΄μ λ νμΌμ μμ νκ³ νμΌμ μ€λ μ·μ 컀λ°ν΄ 보μ. νμΌμ μμ νλ€κ° μ μ₯νκ³ μΆμΌλ©΄ μ€λ μ·μ 컀λ°νλ€.
μνΉ λλ ν 리μ λͺ¨λ νμΌμ ν¬κ² Tracked(κ΄λ¦¬λμμ)μ Untracked(κ΄λ¦¬λμμ΄ μλ)λ‘ λλλ€. Tracked νμΌμ μ΄λ―Έ μ€λ μ·μ ν¬ν¨λΌ μλ νμΌμ΄λ€. Tracked νμΌμ λ Unmodified(μμ νμ§ μμ)μ Modified(μμ ν¨) κ·Έλ¦¬κ³ Staged(컀λ°μΌλ‘ μ μ₯μμ κΈ°λ‘ν ) μν μ€ νλμ΄λ€. κ°λ¨ν λ§νμλ©΄ Gitμ΄ μκ³ μλ νμΌμ΄λΌλ κ²μ΄λ€.
κ·Έλ¦¬κ³ λλ¨Έμ§ νμΌμ λͺ¨λ Untracked νμΌμ΄λ€. Untracked νμΌμ μνΉ λλ ν 리μ μλ νμΌ μ€ μ€λ μ·μλ Staging Areaμλ ν¬ν¨λμ§ μμ νμΌμ΄λ€. μ²μ μ μ₯μλ₯Ό Clone νλ©΄ λͺ¨λ νμΌμ Trackedμ΄λ©΄μ Unmodified μνμ΄λ€. νμΌμ Checkout νκ³ λμ μ무κ²λ μμ νμ§ μμκΈ° λλ¬Έμ κ·Έλ λ€.
λ§μ§λ§ μ»€λ° μ΄ν μμ§ μ무κ²λ μμ νμ§ μμ μνμμ μ΄λ€ νμΌμ μμ νλ©΄ Gitμ κ·Έ νμΌμ Modified μνλ‘ μΈμνλ€. μ€μ λ‘ μ»€λ°μ νκΈ° μν΄μλ μ΄ μμ ν νμΌμ Staged μνλ‘ λ§λ€κ³ , Staged μνμ νμΌμ 컀λ°νλ€. μ΄λ° λΌμ΄νμ¬μ΄ν΄μ κ³μ λ°λ³΅νλ€.
νμΌμ μνλ₯Ό νμΈνλ €λ©΄ λ³΄ν΅ git status
λͺ
λ Ήμ μ¬μ©νλ€.
Clone ν νμ λ°λ‘ μ΄ λͺ
λ Ήμ μ€ννλ©΄ μλκ³Ό κ°μ λ©μμ§λ₯Ό λ³Ό μ μλ€.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
μμ λ΄μ©μ νμΌμ νλλ μμ νμ§ μμλ€λ κ²μ λ§ν΄μ€λ€. Tracked νμΌμ νλλ μμ λμ§ μμλ€λ μλ―Έλ€. Untracked νμΌμ μμ§ μμ΄μ λͺ©λ‘μ λνλμ§ μλλ€. κ·Έλ¦¬κ³ νμ¬ μμ μ€μΈ λΈλμΉλ₯Ό μλ €μ£Όλ©° μλ²μ κ°μ λΈλμΉλ‘λΆν° μ§νλ μμ μ΄ μλ κ²μ λνλΈλ€. κΈ°λ³Έ λΈλμΉκ° masterμ΄κΈ° λλ¬Έμ νμ¬ λΈλμΉ μ΄λ¦μ΄ βmasterβ λ‘ λμ¨λ€. λΈλμΉ κ΄λ ¨ λ΄μ©μ μ°¨μ°¨ μμκ°μ. ch03-git-branching.asc μμ λΈλμΉμ Refsμ λν΄ μμΈν λ€λ£¬λ€.
νλ‘μ νΈμ README
νμΌμ λ§λ€μ΄λ³΄μ.
README
νμΌμ μλ‘ λ§λ νμΌμ΄κΈ° λλ¬Έμ git status
λ₯Ό μ€ννλ©΄ 'Untracked filesβμ λ€μ΄ μλ€:
$ echo 'My Project' > README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
README
νμΌμ βUntracked filesβ λΆλΆμ μν΄ μλλ° μ΄κ²μ README
νμΌμ΄ Untracked μνλΌλ κ²μ λ§νλ€.
Gitμ Untracked νμΌμ μμ§ μ€λ
μ·(컀λ°)μ λ£μ΄μ§μ§ μμ νμΌμ΄λΌκ³ λ³Έλ€.
νμΌμ΄ Tracked μνκ° λκΈ° μ κΉμ§λ Gitμ μ λ κ·Έ νμΌμ 컀λ°νμ§ μλλ€. κ·Έλμ μΌνλ©΄μ μμ±νλ λ°μ΄λ리 νμΌ κ°μ κ²μ 컀λ°νλ μ€μλ νμ§ μκ² λλ€.
README
νμΌμ μΆκ°ν΄μ μ§μ Tracked μνλ‘ λ§λ€μ΄ 보μ.
git add
λͺ
λ ΉμΌλ‘ νμΌμ μλ‘ μΆμ ν μ μλ€.
μλ λͺ
λ Ήμ μ€ννλ©΄ Gitμ README
νμΌμ μΆμ νλ€.
$ git add README
git status
λͺ
λ Ήμ λ€μ μ€ννλ©΄ README
νμΌμ΄ Tracked μνμ΄λ©΄μ 컀λ°μ μΆκ°λ Staged μνλΌλ κ²μ νμΈν μ μλ€.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
βChanges to be committedβ μ λ€μ΄ μλ νμΌμ Staged μνλΌλ κ²μ μλ―Ένλ€.
컀λ°νλ©΄ git add
λ₯Ό μ€νν μμ μ νμΌμ΄ 컀λ°λμ΄ μ μ₯μ νμ€ν 리μ λ¨λλ€.
μμμ git init
λͺ
λ Ήμ μ€νν ν, git add (files)
λͺ
λ Ήμ μ€ννλ κ±Έ κΈ°μ΅ν κ²μ΄λ€. μ΄ λͺ
λ Ήμ ν΅ν΄ λλ ν 리μ μλ νμΌμ μΆμ νκ³ κ΄λ¦¬νλλ‘ νλ€.
git add
λͺ
λ Ήμ νμΌ λλ λλ ν 리μ κ²½λ‘λ₯Ό μκ·λ¨ΌνΈλ‘ λ°λλ€. λλ ν 리면 μλμ μλ λͺ¨λ νμΌλ€κΉμ§ μ¬κ·μ μΌλ‘ μΆκ°νλ€.
μ΄λ―Έ Tracked μνμΈ νμΌμ μμ νλ λ²μ μμ보μ.
CONTRIBUTING.md
λΌλ νμΌμ μμ νκ³ λμ git status
λͺ
λ Ήμ λ€μ μ€ννλ©΄ κ²°κ³Όλ μλμ κ°λ€.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
μ΄ CONTRIBUTING.md
νμΌμ βChanges not staged for commitβ μ μλ€. μ΄κ²μ μμ ν νμΌμ΄ Tracked μνμ΄μ§λ§ μμ§ Staged μνλ μλλΌλ κ²μ΄λ€.
Staged μνλ‘ λ§λ€λ €λ©΄ git add
λͺ
λ Ήμ μ€νν΄μΌ νλ€.
git add
λͺ
λ Ήμ νμΌμ μλ‘ μΆμ ν λλ μ¬μ©νκ³ μμ ν νμΌμ Staged μνλ‘ λ§λ€ λλ μ¬μ©νλ€. Merge ν λ μΆ©λλ μνμ νμΌμ Resolve μνλ‘ λ§λ€λλ μ¬μ©νλ€.
addμ μλ―Έλ νλ‘μ νΈμ νμΌμ μΆκ°νλ€κΈ° 보λ€λ λ€μ 컀λ°μ μΆκ°νλ€κ³ λ°μλ€μ΄λκ² μ’λ€.
git add
λͺ
λ Ήμ μ€ννμ¬ CONTRIBUTING.md
νμΌμ Staged μνλ‘ λ§λ€κ³ git status
λͺ
λ ΉμΌλ‘ κ²°κ³Όλ₯Ό νμΈν΄λ³΄μ.
$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
λ νμΌ λͺ¨λ Staged μνμ΄λ―λ‘ λ€μ 컀λ°μ ν¬ν¨λλ€.
νμ§λ§ μμ§ λ μμ ν΄μΌ νλ€λ κ²μ μκ² λμ΄ λ°λ‘ 컀λ°νμ§ λͺ»νλ μν©μ΄ λμλ€κ³ μκ°ν΄λ³΄μ. μ΄ μν©μμ CONTRIBUTING.md
νμΌμ μ΄κ³ μμ νλ€.
μ΄μ 컀λ°ν μ€λΉκ° λ€ λλ€κ³ μκ°ν ν
μ§λ§, Gitμ κ·Έλ μ§ μλ€.
git status
λͺ
λ ΉμΌλ‘ νμΌμ μνλ₯Ό λ€μ νμΈν΄λ³΄μ.
$ vim CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
ν!
CONTRIBUTING.md
κ° Staged μνμ΄λ©΄μ λμμ Unstaged μνλ‘ λμ¨λ€.
μ΄λ»κ² μ΄λ° μΌμ΄ κ°λ₯ν κΉ?
git add
λͺ
λ Ήμ μ€ννλ©΄ Gitμ νμΌμ λ°λ‘ Staged μνλ‘ λ§λ λ€.
μ§κΈ μ΄ μμ μμ 컀λ°μ νλ©΄ git commit
λͺ
λ Ήμ μ€ννλ μμ μ λ²μ μ΄ μ»€λ°λλ κ²μ΄ μλλΌ λ§μ§λ§μΌλ‘ git add
λͺ
λ Ήμ μ€ννμ λμ λ²μ μ΄ μ»€λ°λλ€.
κ·Έλ¬λκΉ git add
λͺ
λ Ήμ μ€νν νμ λ νμΌμ μμ νλ©΄ git add
λͺ
λ Ήμ λ€μ μ€νν΄μ μ΅μ λ²μ μ Staged μνλ‘ λ§λ€μ΄μΌ νλ€.
$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
git status
λͺ
λ ΉμΌλ‘ νμΈν μ μλ λ΄μ©μ΄ μ’ λ§μ λ³΄μΌ μ μλ€. μ¬μ€ κ·Έλ λ€.
μ’ λ κ°λ¨νκ² λ³κ²½ λ΄μ©μ 보μ¬μ£Όλ μ΅μ
μ΄ μλ€.
git status -s
λλ git status --short
μ²λΌ μ΅μ
μ μ£Όλ©΄ νμ¬ λ³κ²½ν μνλ₯Ό 지λ§νκ² λ³΄μ¬μ€λ€.
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
μμ§ μΆμ νμ§ μλ μ νμΌ μμλ ??
νμκ° λΆλλ€. Staged μνλ‘ μΆκ°ν νμΌ μ€ μλ‘ μμ±ν νμΌ μμλ A
νμκ°, μμ ν νμΌ μμλ M
νμκ° λΆλλ€.
μ λͺ
λ Ήμ κ²°κ³Όμμ μνμ 보 컬λΌμλ λ κ°μ§ μ 보λ₯Ό 보μ¬μ€λ€. μΌμͺ½μλ Staging Areaμμμ μνλ₯Ό, μ€λ₯Έμͺ½μλ Working Treeμμμ μνλ₯Ό νμνλ€.
README
νμΌ κ°μ κ²½μ° λ΄μ©μ λ³κ²½νμ§λ§ μμ§ Staged μνλ‘ μΆκ°νμ§λ μμλ€. lib/simplegit.rb
νμΌμ λ΄μ©μ λ³κ²½νκ³ Staged μνλ‘ μΆκ°κΉμ§ ν μνμ΄λ€. μ κ²°κ³Όμμ μ°¨μ΄μ μ λΉκ΅ν΄λ³΄μ.
Rakefile
μ λ³κ²½νκ³ Staged μνλ‘ μΆκ°ν ν λ λ΄μ©μ λ³κ²½ν΄μ Staged μ΄λ©΄μ Unstaged μνμΈ νμΌμ΄λ€.
μ΄λ€ νμΌμ Gitμ΄ κ΄λ¦¬ν νμκ° μλ€.
λ³΄ν΅ λ‘κ·Έ νμΌμ΄λ λΉλ μμ€ν
μ΄ μλμΌλ‘ μμ±ν νμΌμ΄ κ·Έλ λ€.
κ·Έλ° νμΌμ 무μνλ €λ©΄ .gitignore
νμΌμ λ§λ€κ³ κ·Έ μμ 무μν νμΌ ν¨ν΄μ μ λλ€.
μλλ .gitignore
νμΌμ μμ΄λ€.
$ cat .gitignore
*.[oa]
*~
첫λ²μ§Έ λΌμΈμ νμ₯μκ° β.oβ λ β.aβ μΈ νμΌμ Gitμ΄ λ¬΄μνλΌλ κ²μ΄κ³ λμ§Έ λΌμΈμ ~
λ‘ λλλ λͺ¨λ νμΌμ 무μνλΌλ κ²μ΄λ€. λ³΄ν΅ λλΆλΆμ ν
μ€νΈ νΈμ§κΈ°μμ μμνμΌλ‘ μ¬μ©νλ νμΌ μ΄λ¦μ΄κΈ° λλ¬Έμ΄λ€.
β.oβ μ β.aβ λ κ°κ° λΉλ μμ€ν
μ΄ λ§λ€μ΄λ΄λ μ€λΈμ νΈμ μμΉ΄μ΄λΈ νμΌμ΄κ³ ~
λ‘ λλλ νμΌμ Emacsλ VI κ°μ ν
μ€νΈ νΈμ§κΈ°κ° μμλ‘ λ§λ€μ΄λ΄λ νμΌμ΄λ€.
λ log, tmp, pid κ°μ λλ ν 리λ, μλμΌλ‘ μμ±νλ λ¬Έμ κ°μ κ²λ€λ μΆκ°ν μ μλ€.
.gitignore
νμΌμ λ³΄ν΅ μ²μμ λ§λ€μ΄ λλ κ²μ΄ νΈλ¦¬νλ€. κ·Έλμ Git μ μ₯μμ 컀λ°νκ³ μΆμ§ μμ νμΌμ μ€μλ‘ μ»€λ°νλ μΌμ λ°©μ§ν μ μλ€.
.gitignore
νμΌμ μ
λ ₯νλ ν¨ν΄μ μλ κ·μΉμ λ°λ₯Έλ€.
-
μ무κ²λ μλ λΌμΈμ΄λ,
#
λ‘ μμνλ λΌμΈμ 무μνλ€. -
νμ€ Glob ν¨ν΄μ μ¬μ©νλ€. μ΄λ νλ‘μ νΈ μ 체μ μ μ©λλ€.
-
μ¬λμ(
/
)λ‘ μμνλ©΄ νμ λλ ν 리μ μ μ©λμ§(Recursivity) μλλ€. -
λλ ν 리λ μ¬λμ(
/
)λ₯Ό λμ μ¬μ©νλ κ²μΌλ‘ νννλ€. -
λλν(
!
)λ‘ μμνλ ν¨ν΄μ νμΌμ 무μνμ§ μλλ€.
Glob ν¨ν΄μ μ κ·ννμμ λ¨μνκ² λ§λ κ²μΌλ‘ μκ°νλ©΄ λκ³ λ³΄ν΅ μμμ λ§μ΄ μ¬μ©νλ€.
μ μ€ν°λ¦¬μ€ν¬(*
)λ λ¬Έμκ° νλλ μκ±°λ νλ μ΄μμ μλ―Ένκ³ , [abc]
λ μ€κ΄νΈ μμ μλ λ¬Έμ μ€ νλλ₯Ό μλ―Ένλ€(κ·Έλ¬λκΉ μ΄ κ²½μ°μλ a, b, c). λ¬Όμν(?
)λ λ¬Έμ νλλ₯Ό λ§νκ³ , [0-9]
μ²λΌ μ€κ΄νΈ μμ μΊλ¦ν° μ¬μ΄μ νμ΄ν(-
)μ μ¬μ©νλ©΄ κ·Έ μΊλ¦ν° μ¬μ΄μ μλ λ¬Έμ νλλ₯Ό λ§νλ€.
μ μ€ν°λ¦¬μ€ν¬ 2κ°λ₯Ό μ¬μ©νμ¬ λλ ν 리 μμ λλ ν 리 κΉμ§ μ§μ ν μ μλ€. a/**/z
ν¨ν΄μ a/z
, a/b/z
, a/b/c/z
λλ ν 리μ μ¬μ©ν μ μλ€.
μλλ .gitignore
νμΌμ μμ΄λ€.
# νμ₯μκ° .aμΈ νμΌ λ¬΄μ
*.a
# μ λΌμΈμμ νμ₯μκ° .aμΈ νμΌμ 무μνκ² νμ§λ§ lib.aλ 무μνμ§ μμ
!lib.a
# νμ¬ λλ ν 리μ μλ TODOνμΌμ 무μνκ³ subdir/TODOμ²λΌ νμλλ ν 리μ μλ νμΌμ 무μνμ§ μμ
/TODO
# build/ λλ ν 리μ μλ λͺ¨λ νμΌμ 무μ
build/
# doc/notes.txt νμΌμ 무μνκ³ doc/server/arch.txt νμΌμ 무μνμ§ μμ
doc/*.txt
# doc λλ ν 리 μλμ λͺ¨λ .pdf νμΌμ 무μ
doc/**/*.pdf
Tip
|
GitHubμ λ€μν νλ‘μ νΈμμ μμ£Ό μ¬μ©νλ |
Note
|
λ€μμ |
λ¨μν νμΌμ΄ λ³κ²½λλ€λ μ¬μ€μ΄ μλλΌ μ΄λ€ λ΄μ©μ΄ λ³κ²½λλμ§ μ΄ν΄λ³΄λ €λ©΄ git status
λͺ
λ Ήμ΄ μλλΌ git diff
λͺ
λ Ήμ μ¬μ©ν΄μΌ νλ€.
λ³΄ν΅ μ°λ¦¬λ 'μμ νμ§λ§, μμ§ Staged νμΌμ΄ μλ κ²?'κ³Ό 'μ΄λ€ νμΌμ΄ Staged μνμΈμ§?'κ° κΆκΈνκΈ° λλ¬Έμ git status
λͺ
λ ΉμΌλ‘λ μΆ©λΆνλ€.
λ μμΈνκ² λ³Ό λλ git diff
λͺ
λ Ήμ μ¬μ©νλλ° Patchμ²λΌ μ΄λ€ λΌμΈμ μΆκ°νκ³ μμ νλμ§κ° κΆκΈν λ μ¬μ©νλ€.
git diff
λ λμ€μ λ μμΈν λ€λ£¬λ€.
README
νμΌμ μμ ν΄μ Staged μνλ‘ λ§λ€κ³ CONTRIBUTING.md
νμΌμ κ·Έλ₯ μμ λ§ ν΄λλ€.
μ΄ μνμμ git status
λͺ
λ Ήμ μ€ννλ©΄ μλμ κ°μ λ©μμ§λ₯Ό λ³Ό μ μλ€.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
git diff
λͺ
λ Ήμ μ€ννλ©΄ μμ νμ§λ§ μμ§ staged μνκ° μλ νμΌμ λΉκ΅ν΄ λ³Ό μ μλ€.
$ git diff
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
Please include a nice description of your changes when you submit your PR;
if we have to read the whole diff to figure out why you're contributing
in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.
If you are starting to work on a particular area, feel free to submit a PR
that highlights your work in progress (and note in the PR title that it's
μ΄ λͺ λ Ήμ μνΉ λλ ν 리μ μλ κ²κ³Ό Staging Areaμ μλ κ²μ λΉκ΅νλ€. κ·Έλμ μμ νκ³ μμ§ Stage νμ§ μμ κ²μ 보μ¬μ€λ€.
λ§μ½ 컀λ°νλ €κ³ Staging Areaμ λ£μ νμΌμ λ³κ²½ λΆλΆμ λ³΄κ³ μΆμΌλ©΄ git diff --staged
μ΅μ
μ μ¬μ©νλ€.
μ΄ λͺ
λ Ήμ μ μ₯μμ 컀λ°ν κ²κ³Ό Staging Areaμ μλ κ²μ λΉκ΅νλ€.
$ git diff --staged
diff --git a/README b/README
new file mode 100644
index 0000000..03902a1
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+My Project
κΌ μμ§ λ§μμΌ ν κ²μ΄ μλλ° git diff
λͺ
λ Ήμ λ§μ§λ§μΌλ‘ 컀λ°ν νμ μμ ν κ²λ€ μ λΆλ₯Ό 보μ¬μ£Όμ§ μλλ€. git diff
λ Unstaged μνμΈ κ²λ€λ§ 보μ¬μ€λ€.
μμ ν νμΌμ λͺ¨λ Staging Areaμ λ£μλ€λ©΄ git diff
λͺ
λ Ήμ μ무κ²λ μΆλ ₯νμ§ μλλ€.
CONTRIBUTING.md
νμΌμ Stage ν νμ λ€μ μμ ν΄λ git diff
λͺ
λ Ήμ μ¬μ©ν μ μλ€.
μ΄λλ Staged μνμΈ κ²κ³Ό Unstaged μνμΈ κ²μ λΉκ΅νλ€.
$ git add CONTRIBUTING.md
$ echo '# test line' >> CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: CONTRIBUTING.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
git diff
λͺ
λ ΉμΌλ‘ Unstaged μνμΈ λ³κ²½ λΆλΆμ νμΈν μ μλ€.
$ git diff
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 643e24f..87f08c8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -119,3 +119,4 @@ at the
## Starter Projects
See our [projects list](https://github.com/libgit2/libgit2/blob/development/PROJECTS.md).
+# test line
Staged μνμΈ νμΌμ git diff --cached
μ΅μ
μΌλ‘ νμΈνλ€. --staged
μ --cached
λ κ°μ μ΅μ
μ΄λ€.
$ git diff --cached
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
Please include a nice description of your changes when you submit your PR;
if we have to read the whole diff to figure out why you're contributing
in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.
If you are starting to work on a particular area, feel free to submit a PR
that highlights your work in progress (and note in the PR title that it's
Note
|
μΈλΆ λκ΅¬λ‘ λΉκ΅νκΈ°
μ΄ μ±
μμλ κ³μ |
μμ ν κ²μ 컀λ°νκΈ° μν΄ Staging Areaμ νμΌμ μ 리νλ€.
Unstaged μνμ νμΌμ 컀λ°λμ§ μλλ€λ κ²μ κΈ°μ΅ν΄μΌ νλ€. Gitμ μμ±νκ±°λ μμ νκ³ λμ git add
λͺ
λ ΉμΌλ‘ μΆκ°νμ§ μμ νμΌμ 컀λ°νμ§ μλλ€.
κ·Έ νμΌμ μ¬μ ν Modified μνλ‘ λ¨μ μλ€.
컀λ°νκΈ° μ μ git status
λͺ
λ ΉμΌλ‘ λͺ¨λ κ²μ΄ Staged μνμΈμ§ νμΈν μ μλ€.
κ·Έ νμ git commit
μ μ€ννμ¬ μ»€λ°νλ€.
$ git commit
Git μ€μ μ μ§μ λ νΈμ§κΈ°κ° μ€νλκ³ , μλμ κ°μ ν
μ€νΈκ° μλμΌλ‘ ν¬ν¨λλ€
(μλ μμ λ Vim νΈμ§κΈ°μ νλ©΄μ΄λ€. μ΄ νΈμ§κΈ°λ μμ EDITOR
νκ²½ λ³μμ λ±λ‘λ νΈμ§κΈ°μ΄κ³ 보ν΅μ Vimμ΄λ Emacsμ μ¬μ©νλ€. λ ch01-getting-started.asc μμ μ€λͺ
νλ―μ΄ git config --global core.editor
λͺ
λ ΉμΌλ‘ μ΄λ€ νΈμ§κΈ°λ₯Ό μ¬μ©ν μ§ μ€μ ν μ μλ€).
νΈμ§κΈ°λ μλμ κ°μ λ΄μ©μ νμνλ€(μλ μμ λ Vim νΈμ§κΈ°).
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
# new file: README
# modified: CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
μλμΌλ‘ μμ±λλ μ»€λ° λ©μμ§μ 첫 λΌμΈμ λΉμ΄ μκ³ λμ§Έ λΌμΈλΆν° git status
λͺ
λ Ήμ κ²°κ³Όκ° μ±μμ§λ€.
컀λ°ν λ΄μ©μ μ½κ² κΈ°μ΅ν μ μλλ‘ μ΄ λ©μμ§λ₯Ό ν¬ν¨ν μλ μκ³ λ©μμ§λ₯Ό μ λΆ μ§μ°κ³ μλ‘ μμ±ν μ μλ€
(μ νν λ μμ νλμ§λ 보μ¬μ€ μ μλλ°,
git commit
μ -v μ΅μ
μ μΆκ°νλ©΄ νΈμ§κΈ°μ diff λ©μμ§λ μΆκ°λλ€).
λ΄μ©μ μ μ₯νκ³ νΈμ§κΈ°λ₯Ό μ’
λ£νλ©΄ Gitμ μ
λ ₯λ λ΄μ©(#λ‘ μμνλ λ΄μ©μ μ μΈν)μΌλ‘ μ 컀λ°μ νλ μμ±νλ€.
λ©μμ§λ₯Ό μΈλΌμΈμΌλ‘ 첨λΆν μλ μλ€. commit
λͺ
λ Ήμ μ€νν λ μλμ κ°μ΄ -m
μ΅μ
μ μ¬μ©νλ€.
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README
μ΄λ κ² μ²«λ²μ§Έ 컀λ°μ μμ±ν΄λ³΄μλ€.
commit
λͺ
λ Ήμ λͺ κ°μ§ μ 보λ₯Ό μΆλ ₯νλλ° μ μμ λ (master
) λΈλμΉμ 컀λ°νκ³ μ²΄ν¬μ¬μ (463dc4f
)μ΄λΌκ³ μλ €μ€λ€. κ·Έλ¦¬κ³ μμ ν νμΌμ΄ λͺ κ°μ΄κ³ μμ λκ±°λ μΆκ°λ λΌμΈμ΄ λͺ λΌμΈμΈμ§ μλ €μ€λ€.
Gitμ Staging Areaμ μν μ€λ μ·μ 컀λ°νλ€λ κ²μ κΈ°μ΅ν΄μΌ νλ€. μμ μ νμ§λ§, μμ§ Staging Areaμ λ£μ§ μμ κ²μ λ€μμ 컀λ°ν μ μλ€. 컀λ°ν λλ§λ€ νλ‘μ νΈμ μ€λ μ·μ κΈ°λ‘νκΈ° λλ¬Έμ λμ€μ μ€λ μ·λΌλ¦¬ λΉκ΅νκ±°λ μμ μ€λ μ·μΌλ‘ λλ릴 μ μλ€.
Staging Areaλ 컀λ°ν νμΌμ μ 리νλ€λ μ μμ λ§€μ° μ μ©νμ§λ§ 볡μ‘νκΈ°λ§ νκ³ νμνμ§ μμ λλ μλ€.
μμ£Ό μ½κ² Staging Areaλ₯Ό μλ΅ν μ μλ€. git commit
λͺ
λ Ήμ μ€νν λ -a
μ΅μ
μ μΆκ°νλ©΄ Gitμ Tracked μνμ νμΌμ μλμΌλ‘ Staging Areaμ λ£λλ€.
κ·Έλμ git add
λͺ
λ Ήμ μ€ννλ μκ³ λ₯Ό λ μ μλ€.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)
μ΄ μμ μμλ 컀λ°νκΈ° μ μ git add
λͺ
λ ΉμΌλ‘ CONTRIBUTING.md
νμΌμ μΆκ°νμ§ μμλ€λ μ μ λμ¬κ²¨λ³΄μ.
-a
μ΅μ
μ μ¬μ©νλ©΄ λͺ¨λ νμΌμ΄ μλμΌλ‘ μΆκ°λλ€.
νΈλ¦¬ν μ΅μ
μ΄κΈ΄ νμ§λ§ μ£Όμ κΉκ² μ¬μ©ν΄μΌ νλ€. μκ° μμ΄ μ΄ μ΅μ
μ μ¬μ©νλ€ λ³΄λ©΄ μΆκ°νμ§ λ§μμΌ ν λ³κ²½μ¬νλ μΆκ°λ μ μκΈ° λλ¬Έμ΄λ€.
Gitμμ νμΌμ μ κ±°νλ €λ©΄ git rm
λͺ
λ ΉμΌλ‘ Tracked μνμ νμΌμ μμ ν νμ(μ ννκ²λ Staging Areaμμ μμ νλ κ²) 컀λ°ν΄μΌ νλ€.
μ΄ λͺ
λ Ήμ μνΉ λλ ν 리μ μλ νμΌλ μμ νκΈ° λλ¬Έμ μ€μ λ‘ νμΌλ μ§μμ§λ€.
Git λͺ
λ Ήμ μ¬μ©νμ§ μκ³ λ¨μν μνΉ λλ ν°λ¦¬μμ νμΌμ μμ νκ³ git status
λͺ
λ ΉμΌλ‘ μνλ₯Ό νμΈνλ©΄ Gitμ νμ¬ βChanges not staged for commitβ (μ¦, Unstaged μν)λΌκ³ νμν΄μ€λ€.
$ rm PROJECTS.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: PROJECTS.md
no changes added to commit (use "git add" and/or "git commit -a")
κ·Έλ¦¬κ³ git rm
λͺ
λ Ήμ μ€ννλ©΄ μμ ν νμΌμ Staged μνκ° λλ€.
$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md
컀λ°νλ©΄ νμΌμ μμ λκ³ Gitμ μ΄ νμΌμ λλ μΆμ νμ§ μλλ€.
μ΄λ―Έ νμΌμ μμ νκ±°λ Staging Areaμ(μμ£Ό - Git IndexλΌκ³ λ λΆλ₯Έλ€) μΆκ°νλ€λ©΄ -f
μ΅μ
μ μ£Όμ΄ κ°μ λ‘ μμ ν΄μΌ νλ€.
μ΄ μ μ μ€μλ‘ λ°μ΄ν°λ₯Ό μμ νμ§ λͺ»νλλ‘ νλ μμ μ₯μΉλ€. μ»€λ° νμ§ μκ³ μμ ν λ°μ΄ν°λ GitμΌλ‘ 볡ꡬν μ μκΈ° λλ¬Έμ΄λ€.
λ Staging Areaμμλ§ μ κ±°νκ³ μνΉ λλ ν 리μ μλ νμΌμ μ§μ°μ§ μκ³ λ¨κ²¨λ μ μλ€.
λ€μ λ§ν΄μ νλλμ€ν¬μ μλ νμΌμ κ·Έλλ‘ λκ³ Gitλ§ μΆμ νμ§ μκ² νλ€.
μ΄κ²μ .gitignore
νμΌμ μΆκ°νλ κ²μ λΉΌλ¨Ήμκ±°λ λμ©λ λ‘κ·Έ νμΌμ΄λ μ»΄νμΌλ νμΌμΈ .a
νμΌ κ°μ κ²μ μ€μλ‘ μΆκ°νμ λ μ΄λ€.
--cached
μ΅μ
μ μ¬μ©νμ¬ λͺ
λ Ήμ μ€ννλ€.
$ git rm --cached README
μ¬λ¬ κ°μ νμΌμ΄λ λλ ν 리λ₯Ό νκΊΌλ²μ μμ ν μλ μλ€.
μλμ κ°μ΄ git rm
λͺ
λ Ήμ file-glob ν¨ν΄μ μ¬μ©νλ€.
$ git rm log/\*.log
*
μμ \
μ μ¬μ©ν κ²μ κΈ°μ΅νμ.
νμΌλͺ
νμ₯ κΈ°λ₯μ μμλ§ μλ κ²μ΄ μλλΌ Git μ체μλ μκΈ° λλ¬Έμ νμνλ€.
μ΄ λͺ
λ Ήμ log/
λλ ν 리μ μλ .log
νμΌμ λͺ¨λ μμ νλ€.
μλμ μμ μ²λΌ ν μλ μλ€.
$ git rm \*~
μ΄ λͺ
λ Ήμ ~
λ‘ λλλ νμΌμ λͺ¨λ μμ νλ€.
Gitμ λ€λ₯Έ VCS μμ€ν κ³Όλ λ¬λ¦¬ νμΌ μ΄λ¦μ λ³κ²½μ΄λ νμΌμ μ΄λμ λͺ μμ μΌλ‘ κ΄λ¦¬νμ§ μλλ€. λ€μ λ§ν΄μ νμΌ μ΄λ¦μ΄ λ³κ²½λλ€λ λ³λμ μ 보λ₯Ό μ μ₯νμ§ μλλ€. Gitμ λλν΄μ κ΅³μ΄ νμΌ μ΄λ¦μ΄ λ³κ²½λμλ€λ κ²μ μΆμ νμ§ μμλ μλ λ°©λ²μ΄ μλ€. νμΌμ μ΄λ¦μ΄ λ³κ²½λ κ²μ Gitμ΄ μ΄λ»κ² μμλ΄λμ§ μ΄ν΄λ³΄μ.
μ΄λ κ² λ§νκ³ Gitμ mv
λͺ
λ Ήμ΄ μλ κ² μ’ μ΄μνκ² μ§λ§, μλμ κ°μ΄ νμΌ μ΄λ¦μ λ³κ²½ν μ μλ€.
$ git mv file_from file_to
μ λμνλ€. μ΄ λͺ λ Ήμ μ€ννκ³ Gitμ μνλ₯Ό νμΈν΄λ³΄λ©΄ Gitμ μ΄λ¦μ΄ λ°λ μ¬μ€μ μκ³ μλ€.
$ git mv README.md README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
μ¬μ€ git mv
λͺ
λ Ήμ μλ λͺ
λ Ήμ΄λ₯Ό μνν κ²κ³Ό μμ λκ°λ€.
$ mv README.md README
$ git rm README.md
$ git add README
git mv
λͺ
λ Ήμ μΌμ’
μ λ¨μΆ λͺ
λ Ήμ΄μ΄λ€. μ΄ λͺ
λ ΉμΌλ‘ νμΌ μ΄λ¦μ λ°κΏλ λκ³ mv
λͺ
λ ΉμΌλ‘ νμΌ μ΄λ¦μ μ§μ λ°κΏλ λλ€.
λ¨μ§ git mv
λͺ
λ Ήμ νΈλ¦¬νκ² λͺ
λ Ήμ μΈ λ² μ€νν΄μ£Όλ κ² λΏμ΄λ€.
μ΄λ€ λκ΅¬λ‘ μ΄λ¦μ λ°κΏλ μκ΄μλ€. μ€μν κ²μ μ΄λ¦μ λ³κ²½νκ³ λμ κΌ rm/add λͺ
λ Ήμ μ€νν΄μΌ νλ€λ κ² λΏμ΄λ€.