ํ๋ก์ ํธ๋ฅผ ์ํํ๋ค ๋ณด๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ํจ๊ป ์ฌ์ฉํ ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ธ๋ถ์์ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋๊ฐ ๋ด๋ถ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ์ ์๋ค. ์ด๋ฐ ์ํฉ์์ ์์ฃผ ์๊ธฐ๋ ์ด์๋ ๋ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ณ๊ฐ๋ก ๋ค๋ฃจ๋ฉด์๋ ๊ทธ ์ค ํ๋๋ฅผ ๋ค๋ฅธ ํ๋ ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
Atom ํผ๋๋ฅผ ์ ๊ณตํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ก ๋ค์ด๋ณด์. Atom ํผ๋๋ฅผ ์์ฑํ๋ ์ฝ๋๋ ์ง์ ์์ฑํ์ง ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ๋ก ํ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด CPAN์ด๋ Ruby gem ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Shared ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ฐ๊ฑฐ๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค์ฝ๋๋ฅผ ํ๋ก์ ํธ๋ก ๋ณต์ฌํด์ ์ฌ์ฉํ ์ ์๋ค. ์ฐ์ Shared ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์๋ค. ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๊ฒฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ฝ๊ฐ ์์ ํด์ ์ฌ์ฉํ๊ณ ๋ฐฐํฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๋ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค์ฝ๋๋ฅผ ์ง์ ํ๋ก์ ํธ์ ํฌํจ์ํค๋ ๊ฒฝ์ฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Upstream ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ๋์ ๋ Merge ํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
Git์ ์๋ธ๋ชจ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋๊ตฌ๋ค. Git ์ ์ฅ์ ์์ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ๋๋ ํ ๋ฆฌ๋ก ๋ถ๋ฆฌํด ๋ฃ๋ ๊ฒ์ด ์๋ธ๋ชจ๋์ด๋ค. ๋ค๋ฅธ ๋ ๋ฆฝ๋ Git ์ ์ฅ์๋ฅผ Clone ํด์ ๋ด Git ์ ์ฅ์ ์์ ํฌํจํ ์ ์์ผ๋ฉฐ ๊ฐ ์ ์ฅ์์ ์ปค๋ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
์์ ๋ก ํ์ ํ๋ก์ ํธ ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ์ง๋ ํ๋ก์ ํธ๋ฅผ ํ๋ ๋ง๋ค์ด ์๋ธ๋ชจ๋์ ๊ธฐ๋ฅ์ ์ดํด๋ณด์.
์์
ํ Git ์ ์ฅ์์ ๋ฏธ๋ฆฌ ์ค๋น๋ ๋ฆฌ๋ชจํธ Git ์ ์ฅ์๋ฅผ ์๋ธ๋ชจ๋๋ก ์ถ๊ฐํด๋ณด์.
์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ ๋ช
๋ น์ผ๋ก git submodule add
๋ค์ ์ถ๊ฐํ ์ ์ฅ์์ URL์ ๋ถ์ฌ์ค๋ค. ์ด URL์ ์ ๋๊ฒฝ๋ก๋ ๋๊ณ ์๋๊ฒฝ๋ก๋ ๋๋ค.
์์ ๋ก โDbConnectorโ ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค.
$ git submodule add https://github.com/chaconinc/DbConnector
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ๋ชจ๋์ ํ๋ก์ ํธ ์ ์ฅ์์ ์ด๋ฆ์ผ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค. ์์ ์์๋ โDbConnectorโ ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ง๋ ๋ค. ๋ช ๋ น์ ๋ง์ง๋ง์ ์ํ๋ ์ด๋ฆ์ ๋ฃ์ด ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ผ๋ก ์๋ธ๋ชจ๋์ ์ถ๊ฐํ ์๋ ์๋ค.
์๋ธ๋ชจ๋์ ์ถ๊ฐํ๊ณ ๋ ํ 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: .gitmodules
new file: DbConnector
์ฐ์ .gitmodules
ํ์ผ์ด ๋ง๋ค์ด์ก๋ค.
์ด ํ์ผ์ ์๋ธ๋๋ ํ ๋ฆฌ์ ํ์ ํ๋ก์ ํธ URL์ ๋งคํ ์ ๋ณด๋ฅผ ๋ด์ ์ค์ ํ์ผ์ด๋ค.
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector
์๋ธ๋ชจ๋ ๊ฐ์๋งํผ ์ด ํญ๋ชฉ์ด ์๊ธด๋ค.
์ด ํ์ผ๋ .gitignore
ํ์ผ์ฒ๋ผ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ค.
๋ค๋ฅธ ํ์ผ์ฒ๋ผ Push ํ๊ณ Pull ํ๋ค.
์ด ํ๋ก์ ํธ๋ฅผ Clone ํ๋ ์ฌ๋์ .gitmodules
ํ์ผ์ ๋ณด๊ณ ์ด๋ค ์๋ธ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์๋์ง ์ ์ ์๋ค.
Note
|
gitmodules ํ์ผ์ ์๋ URL์ ์กฐ๊ฑด์ ๋ง๋ ์ฌ๋์ด๋ฉด ๋๊ตฌ๋ ์ง Clone ํ๊ณ Fetch ํ ์ ์๋๋ก ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค๋ฅธ ์ฌ๋์ด Pull์ ํ๋ URL๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์
์ Push ํ๋ URL์ด ์๋ก ๋ค๋ฅธ ์ํฉ์ด๋ผ๋ฉด Pull URL์ด ๋ชจ๋ ์ฌ๋์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ URL์ด์ด์ผ ํ๋ค.
์ด๋ฌ๋ฉด ์๋ธ๋ชจ๋ URL ์ค์ ์ ๋ฎ์ด์ฐ๊ธฐ ํด์ ์ฌ์ฉํ ์ ์๋๋ฐ |
.gitmodules
์ ์ดํด๋ดค๊ณ ์ด์ ํ๋ก์ ํธ ํด๋์ ๋ํด ์ดํด๋ณด์.
git diff
๋ช
๋ น์ ์คํ์ํค๋ฉด ํฅ๋ฏธ๋ก์ด ์ ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
$ git diff --cached DbConnector
diff --git a/DbConnector b/DbConnector
new file mode 160000
index 0000000..c3f01dc
--- /dev/null
+++ b/DbConnector
@@ -0,0 +1 @@
+Subproject commit c3f01dc8862123d317dd46284b05b6892c7b29bc
Git์ DbConnector
๋๋ ํ ๋ฆฌ๋ฅผ ์๋ธ๋ชจ๋๋ก ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋๋ ํ ๋ฆฌ ์๋์ ํ์ผ ์์ ์ฌํญ์ ์ง์ ์ถ์ ํ์ง ์๋๋ค.
๋์ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ํต์งธ๋ก ํน๋ณํ ์ปค๋ฐ์ผ๋ก ์ทจ๊ธํ๋ค.
git diff
์ --submodule
์ต์
์ ๋ํ๋ฉด ์๋ธ๋ชจ๋์ ๋ํด ๋ ์์ธํ ๋์จ๋ค.
$ git diff --cached --submodule
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..71fc376
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "DbConnector"]
+ path = DbConnector
+ url = https://github.com/chaconinc/DbConnector
Submodule DbConnector 0000000...c3f01dc (new submodule)
์ด์ ํ์ ํ๋ก์ ํธ๋ฅผ ํฌํจํ ์ปค๋ฐ์ ์์ฑํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
$ git commit -am 'added DbConnector module'
[master fb9093c] added DbConnector module
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 DbConnector
DbConnector
๋๋ ํ ๋ฆฌ์ ๋ชจ๋๋ 160000
์ด๋ค.
Git์๊ฒ ์์ด 160000 ๋ชจ๋๋ ์ผ๋ฐ์ ์ธ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋๋ผ ํน๋ณํ๋ค๋ ์๋ฏธ๋ค.
๋์ผ๋ก, Push ํ๋ค.
$ git push origin master
์๋ธ๋ชจ๋์ ํฌํจํ๋ ํ๋ก์ ํธ๋ฅผ Clone ํ๋ ์์ ๋ฅผ ์ดํด๋ณธ๋ค. ์ด๋ฐ ํ๋ก์ ํธ๋ฅผ Clone ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ ๋น ๋๋ ํ ๋ฆฌ์ด๋ค.
$ git clone https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 1), reused 13 (delta 0)
Unpacking objects: 100% (14/14), done.
Checking connectivity... done.
$ cd MainProject
$ ls -la
total 16
drwxr-xr-x 9 schacon staff 306 Sep 17 15:21 .
drwxr-xr-x 7 schacon staff 238 Sep 17 15:21 ..
drwxr-xr-x 13 schacon staff 442 Sep 17 15:21 .git
-rw-r--r-- 1 schacon staff 92 Sep 17 15:21 .gitmodules
drwxr-xr-x 2 schacon staff 68 Sep 17 15:21 DbConnector
-rw-r--r-- 1 schacon staff 756 Sep 17 15:21 Makefile
drwxr-xr-x 3 schacon staff 102 Sep 17 15:21 includes
drwxr-xr-x 4 schacon staff 136 Sep 17 15:21 scripts
drwxr-xr-x 4 schacon staff 136 Sep 17 15:21 src
$ cd DbConnector/
$ ls
$
๋ถ๋ช
ํ DbConnector
๋๋ ํ ๋ฆฌ๋ ์์ง๋ง ๋น์ด ์๋ค.
์๋ธ๋ชจ๋์ ๊ด๋ จ๋ ๋ ๋ช
๋ น์ ์คํํด์ผ ์์ ํ Clone ๊ณผ์ ์ด ๋๋๋ค.
๋จผ์ git submodule init
๋ช
๋ น์ ์คํํ๋ฉด ์๋ธ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ก์ปฌ ํ๊ฒฝ์ค์ ํ์ผ์ด ์ค๋น๋๋ค.
์ดํ git submodule update
๋ช
๋ น์ผ๋ก ์๋ธ๋ชจ๋์ ๋ฆฌ๋ชจํธ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์๋ธ๋ชจ๋์ ํฌํจํ ํ๋ก์ ํธ์ ํ์ฌ ์ค๋
์ท์์ Checkout ํด์ผ ํ ์ปค๋ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์๋ธ๋ชจ๋ ํ๋ก์ ํธ์ ๋ํ Checkout์ ํ๋ค.
$ git submodule init
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered for path 'DbConnector'
$ git submodule update
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b29bc'
DbConnector
๋๋ ํ ๋ฆฌ๋ ๋ง์ง๋ง์ผ๋ก ์ปค๋ฐ์ ํ๋ ์ํ๋ก ๋ณต์๋๋ค.
ํ์ง๋ง, ๊ฐ์ ๊ณผ์ ์ ๋ ๊ฐ๋จํ๊ฒ ์คํํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ Clone ํ ๋ git clone
๋ช
๋ น ๋ค์ --recurse-submodules
์ต์
์ ๋ถ์ด๋ฉด ์๋ธ๋ชจ๋์ ์๋์ผ๋ก ์ด๊ธฐํํ๊ณ ์
๋ฐ์ดํธํ๋ค.
$ git clone --recurse-submodules https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 1), reused 13 (delta 0)
Unpacking objects: 100% (14/14), done.
Checking connectivity... done.
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered for path 'DbConnector'
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b29bc'
์ด์ ํ๋ก์ ํธ์ ํฌํจ๋ ์๋ธ๋ชจ๋์ ์ ์ฅ์ ๋ฐ์ดํฐ์ ์ฝ๋๋ ๋ค ๋ฐ์์๋ค. ๋ฉ์ธ ํ๋ก์ ํธ์ ์๋ธ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ค๊ฐ๋ฉฐ ํ์๊ณผ ํ์ ํ ์ค๋น๊ฐ ๋์๋ค.
๊ฐ์ฅ ๋จ์ํ ์๋ธ๋ชจ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ํ์ ํ๋ก์ ํธ๋ฅผ ์์ ํ์ง ์๊ณ ์ฐธ์กฐ๋ง ํ๋ฉด์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด๋ค. ๊ฐ๋จํ ์์ ๋ก ์ด ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณธ๋ค.
์๋ธ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ต์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ค๋ฉด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ์์ git fetch
๋ช
๋ น์ ์คํํ๊ณ git merge
๋ช
๋ น์ผ๋ก Upstream ๋ธ๋์น๋ฅผ Mergeํ๋ค.
$ git fetch
From https://github.com/chaconinc/DbConnector
c3f01dc..d0354fc master -> origin/master
$ git merge origin/master
Updating c3f01dc..d0354fc
Fast-forward
scripts/connect.sh | 1 +
src/db.c | 1 +
2 files changed, 2 insertions(+)
๋ฉ์ธ ํ๋ก์ ํธ๋ก ๋์์์ git diff --submodule
๋ช
๋ น์ ์คํํ๋ฉด ์
๋ฐ์ดํธ๋ ์๋ธ๋ชจ๋๊ณผ ๊ฐ ์๋ธ๋ชจ๋์ ์ถ๊ฐ๋ ์ปค๋ฐ์ ๋ณผ ์ ์๋ค.
๋งค๋ฒ --submodule
์ต์
์ ์ฐ๊ณ ์ถ์ง ์๋ค๋ฉด diff.submodule
์ ๊ฐ์ โlogโ ๋ก ์ค์ ํ๋ฉด ๋๋ค.
$ git config --global diff.submodule log
$ git diff
Submodule DbConnector c3f01dc..d0354fc:
> more efficient db routine
> better connection routine
์ฌ๊ธฐ์ ์ปค๋ฐํ๋ฉด ์๋ธ๋ชจ๋์ ์ ๋ฐ์ดํธ๋ ๋ด์ฉ์ผ๋ก ๋ฉ์ธ ํ๋ก์ ํธ์ ์ ์ฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ๋ฐ์ดํธํ๋ฉด ์ ์ฉ๋๋ค.
์๋ธ๋ชจ๋์ ์ต์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ๋ ์๋ค. ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ์์ Fetch ๋ช
๋ น๊ณผ Merge ๋ช
๋ น์ ์คํํ์ง ์์๋
git submodule update --remote
๋ช
๋ น์ ์คํํ๋ฉด Git์ด ์์์ ์๋ธ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ Fetch ํ๊ณ ์
๋ฐ์ดํธํ๋ค.
$ git submodule update --remote DbConnector
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
3f19983..d0354fc master -> origin/master
Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644'
์ด ๋ช
๋ น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ๋ชจ๋ ์ ์ฅ์์ master
๋ธ๋์น๋ฅผ Checkout ํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ์ํํ๋ค.
์
๋ฐ์ดํธํ ๋์ ๋ธ๋์น๋ฅผ ์ํ๋ ๋ธ๋์น๋ก ๋ฐ๊ฟ ์ ์๋ค.
์๋ฅผ ๋ค์ด DbConnector ์๋ธ๋ชจ๋ ์ ์ฅ์์์ ์
๋ฐ์ดํธํ ๋์ ๋ธ๋์น๋ฅผ โstableโ ๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด .gitmodules
ํ์ผ์ ์ค์ ํ๊ฑฐ๋(์ด ํ์ผ์ ๊ณต์ ํ๋ ๋ชจ๋์๊ฒ โstableโ ๋ธ๋์น๊ฐ ์ ์ฉ๋จ) ๊ฐ์ธ ์ค์ ํ์ผ์ธ .git/config
ํ์ผ์ ์ค์ ํ๋ค.
.gitmodules
ํ์ผ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
$ git config -f .gitmodules submodule.DbConnector.branch stable
$ git submodule update --remote
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
27cf5d3..c87d55d stable -> origin/stable
Submodule path 'DbConnector': checked out 'c87d55d4c6d4b05ee34fbc8cb6f7bf4585ae6687'
-f .gitmodules
์ต์
์ ํฌํจํ์ง ์์ผ๋ฉด ์ด ์ค์ ์ ๊ณต์ ํ์ง ์๊ณ ์ฌ์ฉ์์๊ฒ๋ง ์ ์ฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ๋ ์ ์ฅ์๋ผ๋ฉด ๊ฐ์ ๋ธ๋์น๋ฅผ ์ถ์ ํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ๋ ๋ซ๋ค.
์ด์ git status
๋ช
๋ น๋ฅผ ์คํํ๋ฉด ์๋ก ์
๋ฐ์ดํธํ ์๋ธ๋ชจ๋์ โnew commitsโ ๊ฐ ์๋ค๋ ๊ฑธ ์ ์ ์๋ค.
$ 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: .gitmodules
modified: DbConnector (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
์ค์ ํ์ผ์ status.submodulesummary
ํญ๋ชฉ์ ์ค์ ํ๋ฉด ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ๋จํ ๋ณด์ฌ์ค๋ค.
$ git config status.submodulesummary 1
$ 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: .gitmodules
modified: DbConnector (new commits)
Submodules changed but not updated:
* DbConnector c3f01dc...c87d55d (4):
> catch non-null terminated lines
์ค์ ํ๊ณ ๋ ํ git diff
๋ช
๋ น์ ์คํํด๋ณด์. .gitmodules
ํ์ผ์ด ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฌผ๋ก ์ด๊ฑฐ๋์ ์
๋ฐ์ดํธํด์ ์ปค๋ฐํ ํ์๊ฐ ์๊ธด ์๋ธ๋ชจ๋ ์ ์ฅ์์ ๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
$ git diff
diff --git a/.gitmodules b/.gitmodules
index 6fc0b3d..fd1cc29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,4 @@
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector
+ branch = stable
Submodule DbConnector c3f01dc..c87d55d:
> catch non-null terminated lines
> more robust error handling
> more efficient db routine
> better connection routine
์๋ธ๋ชจ๋์ ์ค์ ๋ก ์ปค๋ฐํ ์ปค๋ฐ๋ค์ ์ ๋ณด๋ฅผ ๋ณด๊ธฐ์๋ ๊ฝค ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ค.
๋น์ทํ ์์ผ๋ก ์ปค๋ฐํ ํ์ ๋ก๊ทธ์์ ์์ ๊ฐ์ด ์ดํด๋ณด๋ ค๋ฉด git log -p
๋ช
๋ น์ผ๋ก ๋ณผ ์ ์๋ค.
$ git log -p --submodule
commit 0a24cfc121a8a3c118e0105ae4ae4c00281cf7ae
Author: Scott Chacon <[email protected]>
Date: Wed Sep 17 16:37:02 2014 +0200
updating DbConnector for bug fixes
diff --git a/.gitmodules b/.gitmodules
index 6fc0b3d..fd1cc29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,4 @@
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector
+ branch = stable
Submodule DbConnector c3f01dc..c87d55d:
> catch non-null terminated lines
> more robust error handling
> more efficient db routine
> better connection routine
git submodule update --remote
๋ช
๋ น์ ์คํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์๋ธ๋ชจ๋์ ์
๋ฐ์ดํธํ๋ค. ์๋ธ๋ชจ๋์ด ์์ฒญ ๋ง์ ๋ ํน์ ์๋ธ๋ชจ๋๋ง ์
๋ฐ์ดํธํ๊ณ ์ ํ ์๋ ์๋๋ฐ ์ด๋ด ๋๋ ์๋ธ๋ชจ๋์ ์ด๋ฆ์ ์ง์ ํด์ ๋ช
๋ น์ ์คํํ๋ค.
๋ฉ์ธ ํ๋ก์ ํธ์์ ์๋ธ๋ชจ๋์ ์ฌ์ฉํ ๋ ์๋ธ๋ชจ๋์์๋ ๋ญ๊ฐ ์์ ์ ํด์ผ ํ ์ํฉ์ ์ผ๋ง๋ ์ง ์๊ธธ ์ ์๋ค. ๋ฉ์ธ ํ๋ก์ ํธ์์ ์์ ํ๋ ๋์ค์ ๋ง์ด๋ค(๋์์ ๋ค๋ฅธ ์๋ธ๋ชจ๋๋ ์์ ํ๊ฑฐ๋). ๋ง์ฝ Git์ ์๋ธ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋ค๋ฅธ Dependency ๊ด๋ฆฌ ์์คํ (Maven์ด๋ Rubygem ๊ฐ์)์ ์ฌ์ฉํ ์๋ ์๋ค.
์ด๋ฒ ์ ์์๋ ์๋ธ๋ชจ๋์ ์์ ํ๊ณ ๊ทธ ๋ด์ฉ์ ๋ด์ ์ปค๋ฐ์ ์ ์งํ ์ฑ๋ก ๋ฉ์ธํ๋ก์ ํธ์ ์๋ธ๋ชจ๋์ ํจ๊ป ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค.
์๋ธ๋ชจ๋ ์ ์ฅ์์์ git submodule update
๋ช
๋ น์ ์คํํ๋ฉด Git์ ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์
๋ฐ์ดํธํ๋ค. ํ์ง๋ง, ์๋ธ๋ชจ๋ ๋ก์ปฌ ์ ์ฅ์๋ โDetached HEADโ ์ํ๋ก ๋จ๋๋ค.
์ด ๋ง์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ถ์ ํ๋ ๋ก์ปฌ ๋ธ๋์น(์๋ฅผ ๋ค์๋ฉด โmasterโ ๊ฐ์)๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
๋ณ๊ฒฝ ๋ด์ฉ์ ์ถ์ ํ๋ ๋ธ๋์น ์์ด ์๋ธ๋ชจ๋์์ ์์ ์์
์ ํ๊ฒ ๋๋ฉด ์ดํ์ git submodule update
๋ช
๋ น์ ์คํํ์ ๋ ์์ ํ ๋ด์ฉ์ ์์ด๋ฒ๋ฆด ์ ์๋ค.
์๋ธ๋ชจ๋ ์์์ ์์ ์ฌํญ์ ์ถ์ ํ๋ ค๋ฉด ๋ค๋ฅธ ์์
์ด ์ข ๋ ํ์ํ๋ค.
์๋ธ๋ชจ๋์ด ๋ธ๋์น๋ฅผ ์ถ์ ํ๊ฒ ํ๋ ค๋ฉด ํ ์ผ์ด ๋ ๊ฐ์ง๋ค.
์ฐ์ ๊ฐ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ์ถ์ ํ ๋ธ๋์น๋ฅผ Checkout ํ๊ณ ์ผ์ ์์ํด์ผ ํ๋ค.
์ดํ ์๋ธ๋ชจ๋์ ์์ ํ ๋ค์์ git submodule update --remote
๋ช
๋ น์ ์คํํด Upstream ์์ ์๋ก์ด ์ปค๋ฐ์ ๊ฐ์ ธ์จ๋ค.
์ด ์ปค๋ฐ์ Merge ํ๊ฑฐ๋ Rebase ํ๋ ๊ฒ์ ์ ํํ ์ ์๋ค.
๋จผ์ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ๋ธ๋์น๋ฅผ Checkout ํ์.
$ git checkout stable
Switched to branch 'stable'
์ฌ๊ธฐ์ โMergeโ ๋ฅผ ํด๋ณด์.
update
๋ช
๋ น์ ์ธ ๋ --merge
์ต์
์ ์ถ๊ฐํ๋ฉด Merge ํ๋๋ก ์ง์ ํ ์ ์๋ค.
์๋ ๊ฒฐ๊ณผ์์ ์๋ฒ๋ก๋ถํฐ ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์์ Merge ํ๋ ๊ณผ์ ์ ๋ณผ ์ ์๋ค.
$ git submodule update --remote --merge
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
c87d55d..92c7337 stable -> origin/stable
Updating c87d55d..92c7337
Fast-forward
src/main.c | 1 +
1 file changed, 1 insertion(+)
Submodule path 'DbConnector': merged in '92c7337b30ef9e0893e758dac2459d07362ab5ea'
DbConnector ๋๋ ํ ๋ฆฌ๋ก ๋ค์ด๊ฐ๋ฉด ์๋ก ์์ ํ ๋ด์ฉ์ด ๋ก์ปฌ ๋ธ๋์น stable
์ ์ด๋ฏธ Merge ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ ๋ค๋ฅธ ์ฌ๋์ด DbConnector ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํด์ Upstream ์ ์ฅ์์ Push ํ ์ํ์์ ์ฐ๋ฆฌ๊ฐ DbConnector ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด์.
$ cd DbConnector/
$ vim src/db.c
$ git commit -am 'unicode support'
[stable f906e16] unicode support
1 file changed, 1 insertion(+)
์ด์ ์๋ธ๋ชจ๋์ ์ ๋ฐ์ดํธํ๋ฉด ๋ก์ปฌ ์ ์ฅ์์์ ์์ ํ ๊ฒ์ด ๋ฌด์์ธ์ง Upstream ์ ์ฅ์์์ ์์ ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ณผ ์ ์๋ค. ์ด ๋์ ํฉ์ณ์ผ ํ๋ค.
$ git submodule update --remote --rebase
First, rewinding head to replay your work on top of it...
Applying: unicode support
Submodule path 'DbConnector': rebased into '5d60ef9bbebf5a0c1c1050f242ceeb54ad58da94'
--rebase
์ต์
์ด๋ --merge
์ต์
์ ์ง์ ํ์ง ์์ผ๋ฉด Git์ ๋ก์ปฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ฌด์ํ๊ณ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ํด๋น ์๋ธ๋ชจ๋์ ๋ฒ์ ์ผ๋ก Reset์ ํ๊ณ Detached HEAD ์ํ๋ก ๋ง๋ ๋ค.
$ git submodule update --remote
Submodule path 'DbConnector': checked out '5d60ef9bbebf5a0c1c1050f242ceeb54ad58da94'
์ผ์ด ์ด๋ ๊ฒ ๋๋๋ผ๋ ๋ฌธ์ ๊ฐ ์ ๋๋ค. Reset์ด ๋ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ์์
ํ๋ ๋ธ๋์น๋ฅผ Checkout ํ๊ณ ์ง์ origin/stable
(์๋๋ฉด ์ํ๋ ์ด๋ ํ ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ )์ Merge ํ๊ฑฐ๋ Rebase ํ๋ฉด ๋๋ค.
์๋ธ๋ชจ๋์ ์ปค๋ฐํ์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ์ฑ๋ก ์๋ธ๋ชจ๋์ ์ ๋ฐ์ดํธํ๋ฉด Git์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ค์ง๋ง, ์๋ธ๋ชจ๋์ ์ ์ฅํ์ง ์์ ์์ ์ ๋ฎ์ด์ฐ์ง ์๋๋ค.
$ git submodule update --remote
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 4 (delta 0)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
5d60ef9..c75e92a stable -> origin/stable
error: Your local changes to the following files would be overwritten by checkout:
scripts/setup.sh
Please, commit your changes or stash them before you can switch branches.
Aborting
Unable to checkout 'c75e92a2b3855c9e5b66f915308390d9db204aca' in submodule path 'DbConnector'
์ ๋ฐ์ดํธ ๋ช ๋ น์ ์คํํ์ ๋ Upstream ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ถฉ๋์ด ๋๋ฉด ์๋ ค์ค๋ค.
$ git submodule update --remote --merge
Auto-merging scripts/setup.sh
CONFLICT (content): Merge conflict in scripts/setup.sh
Recorded preimage for 'scripts/setup.sh'
Automatic merge failed; fix conflicts and then commit the result.
Unable to merge 'c75e92a2b3855c9e5b66f915308390d9db204aca' in submodule path 'DbConnector'
์ด๋ฌ๋ฉด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ์ถฉ๋์ ํด๊ฒฐํ๋ฉด ๋๋ค.
ํ์ฌ ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์๋ค. ์ด ์ค ์ผ๋ถ๋ ์๋ธ๋ชจ๋ ์์ฒด๋ฅผ ์ ๋ฐ์ดํธํ์ฌ Upstream ์ ์ฅ์์์ ๊ฐ์ ธ์จ ๊ฒ์ด๊ณ ์ผ๋ถ๋ ๋ก์ปฌ์์ ์ง์ ์์ ํ ๋ด์ฉ์ด๋ค. ๋ก์ปฌ์์ ์์ ํ ๊ฒ์ ์์ง ๊ณต์ ํ์ง ์์์ผ๋ฏ๋ก ์๋ฌด๋ ์ฌ์ฉํ ์ ์๋ ์ฝ๋์ด๋ค.
$ git diff
Submodule DbConnector c87d55d..82d2ad3:
> Merge from origin/stable
> updated setup script
> unicode support
> remove unnecessary method
> add new option for conn pooling
์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ์ฌํญ์ Push ํ์ง ์์ ์ฑ๋ก ๋ฉ์ธ ํ๋ก์ ํธ์์ ์ปค๋ฐ์ Push ํ๋ฉด ์ ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ Checkout ํ ๋ค๋ฅธ ์ฌ๋์ ์๋ธ๋ชจ๋์ด ์์กดํ๋ ์ฝ๋๋ฅผ ์ด๋์๋ ๊ฐ์ ธ์ฌ ์ ์๋ ์ํฉ์ด ๋ผ ๊ณค๋ํด์ง๋ค. ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ์ฌํญ์ ์ฐ๋ฆฌ์ ๋ก์ปฌ์๋ง ์๋ค.
์ด๋ฐ ๋ถ์์ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ค๋ฉด ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ Push ํ๊ธฐ ์ ์ ์๋ธ๋ชจ๋์ ๋ชจ๋ Push ํ๋์ง ๊ฒ์ฌํ๋๋ก Git์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ๋๋ค.
git push
๋ช
๋ น์ --recurse-submodules
์ต์
์ ์ฃผ๊ณ ์ด ์ต์
์ ๊ฐ์ผ๋ก โcheckโ ๋ โon-demandโ ๋ฅผ ์ค์ ํ๋ค.
โcheckโ ๋ ๊ฐ๋จํ ์๋ธ๋ชจ๋์ ๋ก์ปฌ ์ปค๋ฐ์ด Push ๋์ง ์์ ์ํ๋ผ๋ฉด ํ์ฌ์ Push
๋ช
๋ น๋ ์คํจํ๋๋ก ํ๋ ์ต์
์ด๋ค.
$ git push --recurse-submodules=check
The following submodule paths contain changes that can
not be found on any remote:
DbConnector
Please try
git push --recurse-submodules=on-demand
or cd to the path and use
git push
to push them to a remote.
์์ ์์ ๋ณผ ์ ์๋ ๋๋ก ์ด๋ฌํ ์ํฉ์์ ๋ค์์ผ๋ก ๋ฌด์์ ํด์ผ ํ๋์ง Git์ ๋์์ ์ค๋ค.
๊ฐ์ฅ ๋จ์ํ ๋ฐฉ๋ฒ์ ๊ฐ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ์ง์ ์ผ์ผ์ด Push๋ฅผ ํด์ ์ธ๋ถ๋ก ๊ณต์ ํ๊ณ ๋์ ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ Push ํ๋ ๊ฒ์ด๋ค.
์ด ์ต์
์ด ํญ์ ์ ์ฉ๋๋๋ก ํ๊ณ ์ถ์ผ๋ฉด git config push.recurseSubmodules check
๋ช
๋ น์ผ๋ก ์ค์ ํ๋ค.
์ต์ ์ผ๋ก ์ค์ ํ ์ ์๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก โon-demandโ ๊ฐ์ด ์๋๋ฐ, ์ด ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด Git์ด Push๋ฅผ ๋์ ์๋ํ๋ค.
$ git push --recurse-submodules=on-demand
Pushing submodule 'DbConnector'
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (9/9), 917 bytes | 0 bytes/s, done.
Total 9 (delta 3), reused 0 (delta 0)
To https://github.com/chaconinc/DbConnector
c75e92a..82d2ad3 stable -> stable
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 266 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To https://github.com/chaconinc/MainProject
3d6d338..9a377d1 master -> master
์์์ ๋ณด๋ฏ์ด Git์ด ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ Push ํ๊ธฐ ์ ์ DbConnector ๋ชจ๋๋ก ๋ค์ด๊ฐ์ Push๋ฅผ ํ๋ค.
๋ชจ์ข
์ ์ด์ ๋ก ์๋ธ๋ชจ๋ Push์ ์คํจํ๋ค๋ฉด ๋ฉ์ธ ํ๋ก์ ํธ์ Push ๋ํ ์คํจํ๊ฒ ๋๋ค.
git config push.recurseSubmodules on-demand
๋ช
๋ น์ผ๋ก ์ค์ ํ ์ ์๋ค.
๋ค๋ฅธ ๋๊ตฐ๊ฐ์ ๋์์ ์๋ธ๋ชจ๋์ ์์ ํ๋ฉด ๋ช ๊ฐ์ง ๋ฌธ์ ์ ๋ด์ฐฉํ๊ฒ ๋๋ค. ์๋ธ๋ชจ๋์ ํ์คํ ๋ฆฌ๊ฐ ๊ฐ๋ผ์ ธ์ ์์ ํ๋ก์ ํธ์ ์ปค๋ฐํ๋ค๋ฉด ์ฌํ๋ฅผ ๋ฐ๋ก์ก์์ผ ํ๋ค.
์๋ธ๋ชจ๋์ ์ปค๋ฐ ๋ ๊ฐ๋ฅผ ๋น๊ตํ์ ๋ Fast-Forward Merge๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ Git์ ๋จ์ํ ๋ง์ง๋ง ์ปค๋ฐ์ ์ ํํ๋ค.
ํ์ง๋ง, Fast-Forward๊ฐ ๊ฐ๋ฅํ์ง ์์ผ๋ฉด Git์ ์ถฉ๋ ์์ด Trivial Merge(Merge ์ปค๋ฐ์ ๋จ๊ธฐ๋ Merge)๋ฅผ ํ ์ ์๋ค ํด๋ Merge ํ์ง ์๋๋ค. ์๋ธ๋ชจ๋ ์ปค๋ฐ๋ค์ด ๋ถ๊ธฐ๋๋ค๊ฐ Merge ํด์ผ ํ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ฒ ๋๋ค.
$ git pull
remote: Counting objects: 2, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 2 (delta 1), reused 2 (delta 1)
Unpacking objects: 100% (2/2), done.
From https://github.com/chaconinc/MainProject
9a377d1..eb974f8 master -> origin/master
Fetching submodule DbConnector
warning: Failed to merge submodule DbConnector (merge following commits not found)
Auto-merging DbConnector
CONFLICT (submodule): Merge conflict in DbConnector
Automatic merge failed; fix conflicts and then commit the result.
์ ๊ฒฐ๊ณผ๋ฅผ ํตํด ํ์ฌ ์ํ๋ฅผ ์ดํด๋ณธ๋ค๋ฉด Git์ ๋ถ๊ธฐ๋ ๋ ํ์คํ ๋ฆฌ ๋ธ๋์น๋ฅผ ์ฐพ์๊ณ Merge๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ค. ์ด ์ํฉ์ โmerge following commits not foundโ(Merge ์ปค๋ฐ์ ์ฐพ์ ์ ์์)๋ผ๋ ๋ฉ์์ง๋ก ํํํ๋๋ฐ, ์๋ฏธ๊ฐ ์ข ์ด์ํ์ง๋ง ์ ๊ทธ๋ฐ์ง๋ ์ด์ด์ง๋ ๋ด์ฉ์ผ๋ก ์ค๋ช ํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ธ๋ชจ๋์ด ์ด๋ค ์ํ์ฌ์ผ ํ๋์ง ์์์ผ ํ๋ค.
์ด์ํ๊ฒ๋ Git์ ์ด๋ฅผ ์ํ ์ ๋ณด๋ฅผ ์ถฉ๋ถํ ์ฃผ์ง ์๋๋ค. ์์ชฝ ํ์คํ ๋ฆฌ์ ์๋ ์ปค๋ฐ์ SHA๋ ์๋ ค์ฃผ์ง ์๋๋ค.
๊ทธ๋๋ ์์๋ด๋ ๊ฑด ๊ฐ๋จํ๋ค.
git diff
๋ช
๋ น์ ์คํํ๋ฉด Merge ํ๋ ค๋ ์์ชฝ ๋ธ๋์น์ ๋ด๊ธด ์ปค๋ฐ์ SHA๋ฅผ ์ ์ ์๋ค.
$ git diff
diff --cc DbConnector
index eb41d76,c771610..0000000
--- a/DbConnector
+++ b/DbConnector
์ ๊ฐ์ ๊ฒฝ์ฐ eb41d76
์ด ๋ก์ปฌ ์๋ธ๋ชจ๋์ ์ปค๋ฐ์ด๊ณ c771610
์ด Upstream์ ์๋ ์ปค๋ฐ์ด๋ค.
์๋ธ๋ชจ๋์ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ๋ฉด ํ์ฌ eb41d76
์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๊ณ Merge ์์
์ ์์ง ์ด๋ฃจ์ด์ง์ง ์์๋ค.
์ด ์ํ์์ ํ์ฌ eb41d76
์ปค๋ฐ์ ๋ธ๋์น๋ก ๋ง๋ค์ด Merge ์์
์ ์งํํ ์ ์๋ค.
์ค์ํ ๊ฑด ๋ค๋ฅธ ์ชฝ ์ปค๋ฐ์ SHA์ด๋ค. ์ด์ชฝ์ด Merge ํด์ผ ํ ๋์์ด๋ค. SHA ํด์ ๊ฐ์ ๋ช ์ํ์ฌ ๊ณง๋ฐ๋ก Merge ํ ์๋ ์๊ณ ๋์์ด ๋๋ ์ปค๋ฐ์ ์๋ก ๋ธ๋์น๋ก ํ๋ ๋ง๋ค์ด Merge ํ ์๋ ์๋ค. ๋ ๋ฉ์ง Merge ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ํด์๋ผ๋ ํ์๋ฅผ ์ถ์ฒํ๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ git diff
์์ ๋์จ ๋ ๋ฒ์งธ SHA๋ฅผ ๋ธ๋์น๋ก ๋ง๋ค๊ณ ์ง์ Merge ํ๋ค.
$ cd DbConnector
$ git rev-parse HEAD
eb41d764bccf88be77aced643c13a7fa86714135
$ git branch try-merge c771610
(DbConnector) $ git merge try-merge
Auto-merging src/main.c
CONFLICT (content): Merge conflict in src/main.c
Recorded preimage for 'src/main.c'
Automatic merge failed; fix conflicts and then commit the result.
์ค์ Merge ์ ์ถฉ๋์ด ์ผ์ด๋ฌ๊ณ ํด๊ฒฐํ ๋ค์ ์ปค๋ฐํ๋ค. ์ดํ Merge ํ ์๋ธ๋ชจ๋ ๊ฒฐ๊ณผ๋ก ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
$ vim src/main.c (1)
$ git add src/main.c
$ git commit -am 'merged our changes'
Recorded resolution for 'src/main.c'.
[master 9fd905e] merged our changes
$ cd .. (2)
$ git diff (3)
diff --cc DbConnector
index eb41d76,c771610..0000000
--- a/DbConnector
+++ b/DbConnector
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit eb41d764bccf88be77aced643c13a7fa86714135
-Subproject commit c77161012afbbe1f58b5053316ead08f4b7e6d1d
++Subproject commit 9fd905e5d7f45a0d4cbc43d1ee550f16a30e825a
$ git add DbConnector (4)
$ git commit -m "Merge Tom's Changes" (5)
[master 10d2c60] Merge Tom's Changes
-
๋จผ์ ์ถฉ๋์ ํด๊ฒฐํ๋ค
-
๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ ํ๋ก์ ํธ๋ก ๋์๊ฐ๋ค.
-
SHA-1๋ฅผ ๋ค์ ๊ฒ์ฌํ๊ณ
-
์ถฉ๋ ๋ ์๋ธ๋ชจ๋์ ํด๊ฒฐํ๋ค.
-
Merge ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐํ๋ค.
์ข ๋ฐ๋ผ๊ฐ๊ธฐ ์ด๋ ค์ธ ์ ์์ง๋ง, ์ฌ์ค ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๊ฑด ์๋๋ค.
Git์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํฅ๋ฏธ๋ก์ด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค. ์์์ ์ฐพ์ ๋ ์ปค๋ฐ์ Merge ํ Merge ์ปค๋ฐ์ด ์๋ธ๋ชจ๋ ์ ์ฅ์์ ์กด์ฌํ๋ฉด Git์ ์ด Merge ์ปค๋ฐ์ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ด๋๋๋ค. ๋๊ตฐ๊ฐ ์ด๋ฏธ ์ด ๋ ์ปค๋ฐ์ Merge ํ ๊ธฐ๋ก์ด ์๊ธฐ ๋๋ฌธ์ Git์ ์ด Merge ์ปค๋ฐ์ ์ ์ํ๋ค.
์ด๋ฐ ์ด์ ์์ ์์์ ๋ณธ Merge ํ ์ ์๋ค๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ โmerge following commits not foundโ (Merge ์ปค๋ฐ์ ์ฐพ์ ์ ์์) ์ธ ๊ฒ์ด๋ค. ์ด๋ฐ ๋ฉ์์ง๊ฐ ์ด์ํ ๊น๋ญ์ ๋๊ฐ ์ด๋ฐ ์ผ์ ํ๋ค๊ณ ์์์ด๋ ํ๊ฒ ๋๋๋ ๋ง์ด๋ค.
์์ ์ํฉ์์ ๋ง๋ ํ Merge ์ปค๋ฐ์ ํ๋ ๋ฐ๊ฒฌํ๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
$ git merge origin/master
warning: Failed to merge submodule DbConnector (not fast-forward)
Found a possible merge resolution for the submodule:
9fd905e5d7f45a0d4cbc43d1ee550f16a30e825a: > merged our changes
If this is correct simply add it to the index for example
by using:
git update-index --cacheinfo 160000 9fd905e5d7f45a0d4cbc43d1ee550f16a30e825a "DbConnector"
which will accept this suggestion.
Auto-merging DbConnector
CONFLICT (submodule): Merge conflict in DbConnector
Automatic merge failed; fix conflicts and then commit the result.
Git์ด ์ ์ํ ํด๊ฒฐ์ฑ
์ ๋ง์น git add
ํ ๊ฒ์ฒ๋ผ ํ์ฌ Index๋ฅผ ์
๋ฐ์ดํธํด์ ์ถฉ๋ ์ํฉ์ ํด๊ฒฐํ๊ณ ์ปค๋ฐํ๋ผ๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ ์ํ ํด๊ฒฐ์ฑ
์ ๋ฐ๋ฅด์ง ์์ ์๋ ์๋ค. ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ ๋ณ๊ฒฝ์ฌํญ์ ์ง์ ํ์ธํ๊ณ Fast-forward Merge๋ฅผ ํ ํ Test ํด๋ณด๊ณ ์ปค๋ฐํ ์๋ ์๋ค.
$ cd DbConnector/
$ git merge 9fd905e
Updating eb41d76..9fd905e
Fast-forward
$ cd ..
$ git add DbConnector
$ git commit -am 'Fast forwarded to a common submodule child'
์์ ๊ฐ์ ๋ช ๋ น์ผ๋ก๋ ๊ฐ์ ์์ ์ ์ํํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด Merge ์ปค๋ฐ์ ํด๋นํ๋ ์ฝ๋๋ก ํ ์คํธ๊น์ง ํด ๋ณผ ์ ์์ผ๋ฉฐ, Merge ์์ ํ์ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๊ฐ ํด๋น ์ฝ๋๋ก ์ ๋ฐ์ดํธ๋๋ค.
์๋ธ๋ชจ๋ ์์ ์ ๋์์ค ๋ช ๊ฐ์ง ํ์ ์๊ฐํ๋ค.
foreach
๋ผ๋ ์๋ธ๋ชจ๋ ๋ช
๋ น์ด ์์ด ํ ๋ฒ์ ๊ฐ ์๋ธ๋ชจ๋์ Git ๋ช
๋ น์ ๋ด๋ฆด ์ ์๋ค.
ํ ํ๋ก์ ํธ ์์ ๋ค์์ ์๋ธ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ์๋ธ๋ชจ๋์ ๊ฑธ์ณ ์์ ํ๋ ๋์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฒ๊ทธ ์์ ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ค. ๊ฐ๋จํ ์๋์ ๊ฐ์ ๋ช ๋ น์ผ๋ก ํ๊บผ๋ฒ์ ๋ชจ๋ ์๋ธ๋ชจ๋์ Stash ๋ช ๋ น์ ์คํํ ์ ์๋ค.
$ git submodule foreach 'git stash'
Entering 'CryptoLibrary'
No local changes to save
Entering 'DbConnector'
Saved working directory and index state WIP on stable: 82d2ad3 Merge from origin/stable
HEAD is now at 82d2ad3 Merge from origin/stable
์์ ๊ฐ์ด ๋ช ๋ น์ ์คํํ๊ณ ๋๋ฉด ๋ชจ๋ ์๋ธ๋ชจ๋๊ณผ ํจ๊ป ์ ๋ธ๋์น๋ก ์ด๋ํด์ ์์ ํ ์ค๋น๋ฅผ ๋ง์น๊ฒ ๋๋ค.
$ git submodule foreach 'git checkout -b featureA'
Entering 'CryptoLibrary'
Switched to a new branch 'featureA'
Entering 'DbConnector'
Switched to a new branch 'featureA'
๊ฐ์ด ์กํ๋๊ฐ? ์ด ๋ช ๋ น์ ์ ์ฉํ ๊ฒฝ์ฐ๋ ์๋ธ๋ชจ๋์ ํฌํจํ ๋ฉ์ธ ํ๋ก์ ํธ์ ์ ์ฒด diff ๋ด์ฉ์ ํ๊บผ๋ฒ์ ๊ฒฐ๊ณผ๋ก ์ป๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ด๋ค.
$ git diff; git submodule foreach 'git diff'
Submodule DbConnector contains modified content
diff --git a/src/main.c b/src/main.c
index 210f1ae..1f0acdc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -245,6 +245,8 @@ static int handle_alias(int *argcp, const char ***argv)
commit_pager_choice();
+ url = url_decode(url_orig);
+
/* build alias_argv */
alias_argv = xmalloc(sizeof(*alias_argv) * (argc + 1));
alias_argv[0] = alias_string + 1;
Entering 'DbConnector'
diff --git a/src/db.c b/src/db.c
index 1aaefb6..5297645 100644
--- a/src/db.c
+++ b/src/db.c
@@ -93,6 +93,11 @@ char *url_decode_mem(const char *url, int len)
return url_decode_internal(&url, len, NULL, &out, 0);
}
+char *url_decode(const char *url)
+{
+ return url_decode_mem(url, strlen(url));
+}
+
char *url_decode_parameter_name(const char **query)
{
struct strbuf out = STRBUF_INIT;
์์ ๊ฒฐ๊ณผ๋ก ์ ์ ์๋ ๋ด์ฉ์ ์๋ธ๋ชจ๋์์ ์ ํจ์๋ฅผ ์ถ๊ฐํ๊ณ ๋ฉ์ธ ํ๋ก์ ํธ์์ ์ถ๊ฐํ ํจ์๋ฅผ ํธ์ถํ๋ค๋ ๋ด์ฉ์ด๋ค. ์์ ๋ก ์ดํด๋ณธ ๋ด์ฉ์ ์์ฃผ ๋จ์ํ ์์์ผ ๋ฟ์ด์ง๋ง ์ด๋ป๊ฒ foreach ๋ช ๋ น์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋์ง ๊ฐ ์ก์ ์ ์์ ๊ฒ์ด๋ค.
์๋ธ๋ชจ๋์ ์ด์ฉํ๋ ๋ช ๋ น์ ๋๋ถ๋ถ ๊ธธ์ด๊ฐ ๊ธธ์ด์ Alias๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ๋ค. ํน์ ์ค์ ํ์ผ์ ํตํด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋ชจ๋ ๋ช ๋ น์ ์ค์ ํ์ง ์๊ณ ์ฝ๊ฒ ์๋ธ๋ชจ๋์ ์ฌ์ฉํ ๋๋ Alias๋ ์ ์ฉํ๋ค. Alias๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ch02-git-basics-chapter.asc์์ ์ด๋ฏธ ๋ค๋ฃจ์๋ค. ์ฌ๊ธฐ์์๋ ์๋ธ๋ชจ๋์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ์ ์ฉํ Alias๋ง ์ดํด๋ณธ๋ค.
$ git config alias.sdiff '!'"git diff && git submodule foreach 'git diff'"
$ git config alias.spush 'push --recurse-submodules=on-demand'
$ git config alias.supdate 'submodule update --remote --merge'
์์ ๊ฐ์ด ์ค์ ํ๋ฉด git supdate
๋ช
๋ น์ผ๋ก ๊ฐ๋จํ ์๋ธ๋ชจ๋์ ์
๋ฐ์ดํธํ ์ ์๊ณ git spush
๋ช
๋ น์ผ๋ก ๊ฐ๋จํ ์๋ธ๋ชจ๋๋ ์
๋ฐ์ดํธ๊ฐ ํ์ํ์ง ํ์ธํ๋ฉฐ ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ Push ํ ์ ์๋ค.
์ ์ฒด์ ์ผ๋ก ์๋ธ๋ชจ๋์ ์ด๋ ต์ง ์๊ฒ ์ฌ์ฉํ ์ ์์ง๋ง, ์๋ธ๋ชจ๋์ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ์๋ ์ฃผ์ํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด Checkout์ผ๋ก ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์๋ธ๋ชจ๋์ด ํฌํจ๋ ์์ ์ด๋ผ๋ฉด ์ข ์ ๋งคํ๊ฒ ๋์ํ ์ ์๋ค. ๋ฉ์ธ ํ๋ก์ ํธ์์ ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ Checkout ํ ํ ์๋ก ์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ค. ์ดํ ๋ค์ ์ด์ ๋ธ๋์น๋ก Checkout ํ๋ฉด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ ์ถ์ ํ์ง ์๋ ๋๋ ํ ๋ฆฌ๋ก ๋จ๊ฒ ๋๋ค.
$ git checkout -b add-crypto
Switched to a new branch 'add-crypto'
$ git submodule add https://github.com/chaconinc/CryptoLibrary
Cloning into 'CryptoLibrary'...
...
$ git commit -am 'adding crypto library'
[add-crypto 4445836] adding crypto library
2 files changed, 4 insertions(+)
create mode 160000 CryptoLibrary
$ git checkout master
warning: unable to rmdir CryptoLibrary: Directory not empty
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ 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)
CryptoLibrary/
nothing added to commit but untracked files present (use "git add" to track)
๋ฌผ๋ก ์ถ์ ํ์ง ์๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ฐ๋ ๊ฑด ์ฝ๋ค. ์ด๋ ๊ฒ ์๋์ผ๋ก ์ง์์ผ ํ๋ค๋ ๊ฒ ์ด์ํ ๊ฒ์ด๋ค.
์๋์ผ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ฐ๊ณ ๋ค์ ์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ ๋ธ๋์น๋ก Checkout ํ๋ฉด submodule update --init
๋ช
๋ น์ ์คํํด ์ค์ผ ์๋ธ๋ชจ๋์ ์ฝ๋๊ฐ ๋ํ๋๋ค(์ญ์ฃผ - ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋๋ฉด Detached HEAD๊ฐ ๋๋ค).
$ git clean -ffdx
Removing CryptoLibrary/
$ git checkout add-crypto
Switched to branch 'add-crypto'
$ ls CryptoLibrary/
$ git submodule update --init
Submodule path 'CryptoLibrary': checked out 'b8dda6aa182ea4464f3f3264b11e0268545172af'
$ ls CryptoLibrary/
Makefile includes scripts src
๋ช ๋ น์ด ์ด๋ ค์ด ๊ฑด ์๋์ง๋ง, ๋ค์ ๋ด๋ ์ด์ํ๋ค.
๋ ํ๋ ์ฃผ์ ๊น๊ฒ ์ดํด๋ณผ ์ผ์ ์๋ธ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ธ๋ชจ๋๋ก ๊ต์ฒดํ๋ฉด์ ๋ธ๋์น๊ฐ ์ด๋ํ๋ ๊ฒฝ์ฐ์ด๋ค. ๋ฉ์ธ ํ๋ก์ ํธ์์ ๊ด๋ฆฌํ๋ ์๋ธ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์๋ธ๋ชจ๋๋ก ๊ต์ฒดํ ๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ผ๋ฉด Git์ ์ง์ด๋์ง๊ณ ์ถ๊ฒ ๋๋ค. ์๋ธ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ธ๋ชจ๋๋ก ๊ต์ฒดํ๋ ์ํฉ์ ์ดํด๋ณด์. ์ฐ์ ์๋ธ๋๋ ํ ๋ฆฌ๋ฅผ ๊ทธ๋ฅ ์ง์ฐ๊ณ ๋ฐ๋ก ์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ค๋ฉด ์ค๋ฅ๊ฐ ๋ํ๋๋ค.
$ rm -Rf CryptoLibrary/
$ git submodule add https://github.com/chaconinc/CryptoLibrary
'CryptoLibrary' already exists in the index
์์ ๊ฐ์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ฐ์ CryptoLibrary
๋๋ ํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌ๋์์์ ์ญ์ ํ๊ณ ๋์
์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ค.
$ git rm -r CryptoLibrary
$ git submodule add https://github.com/chaconinc/CryptoLibrary
Cloning into 'CryptoLibrary'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
์์ ์์ ์ master๊ฐ ์๋ ์ด๋ค ๋ธ๋์น์์ ์คํํ ์ํฉ์ด๋ค. ๋ง์ฝ ๋ค์ master ๋ธ๋์น๋ก Checkout ํ๊ฒ ๋๋ฉด ์๋ธ๋ชจ๋์ด ์๋๋ผ ์๋ธ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํด์ผ ํ๋ ์ํฉ์ด ๋๋๋ฐ, ์๋์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ง๋๊ฒ ๋๋ค.
$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
CryptoLibrary/Makefile
CryptoLibrary/includes/crypto.h
...
Please move or remove them before you can switch branches.
Aborting
๋ฌผ๋ก checkout -f
์ต์
์ ๋ถ์ฌ์ ๊ฐ์ ๋ก ๋ธ๋์น๋ฅผ Checkout ํ ์ ์์ง๋ง, ์๋ธ๋ชจ๋์์ ์ ์ฅํ์ง ์์ ๋ด์ฉ์ ๋๋๋ฆด ์ ์๊ฒ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ ์ฃผ์ ๊น๊ฒ ๊ฐ์ ์ ์ฉ ์ต์
์ ์ฌ์ฉํด์ผ ํ๋ค.
$ git checkout -f master
warning: unable to rmdir CryptoLibrary: Directory not empty
Switched to branch 'master'
ํ์ ๋ค์ ์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ ๋ธ๋์น๋ก Checkout ํ๋ฉด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ CryptoLibrary
๋ ๋น์ด ์๋ค. ๊ฐํน git submodule update
๋ช
๋ น์ผ๋ก ์๋ธ๋ชจ๋์ ์ด๊ธฐํํ๋๋ผ๋ ์๋ธ๋ชจ๋ ์ฝ๋๊ฐ ์ด์๋์ง ์์ ์ ์๋ค.
์ด๋ด ๋๋ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ git checkout .
๋ช
๋ น์ ์คํํ๋ฉด ์๋ธ๋ชจ๋ ์ฝ๋๊ฐ ๋ํ๋๋ค.
์๋ธ๋ชจ๋์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ submodule foreach
๋ช
๋ น์ผ๋ก ํ๊บผ๋ฒ์ ์ฝ๋๋ฅผ ๋ณต๊ตฌํ ์ ์๋ค.
์ต์ ๋ฒ์ ์ Git์ ์๋ธ๋ชจ๋์ ์ปค๋ฐ ๋ฐ์ดํฐ๋ ๋ฉ์ธ ํ๋ก์ ํธ์ .git
๋๋ ํ ๋ฆฌ์์ ๊ด๋ฆฌํ๋ค. ์์ ๋ฒ์ ์ Git๊ณผ ๋ฌ๋ฆฌ ์๋ธ๋ชจ๋์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๊ฐ๋จ๋ ธ๋ค ํ๋๋ผ๋ ๊ธฐ๋กํด ๋ ์ปค๋ฐ ๋ฐ์ดํฐ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
์ด๋ฐ ์ฌ๋ฌ ๋๊ตฌ์ ํจ๊ป ์๋ธ๋ชจ๋์ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๋จํ๊ณ ํจ์จ์ ์ผ๋ก ๋ฉ์ธ ํ๋ก์ ํธ์ ํ์ ํ๋ก์ ํธ๋ฅผ ๋์์ ๊ด๋ฆฌํ ์ ์๋ค.