์ธ๊ณ๋ฐ๊ณ ๋์ ์ด ๊ธฐ๋ฅ ์ฝ๋๊ฐ ์ด๋ ์๋๋๋ฅผ ๋งค๋ฒ ๋ฌผ์ด๋ดค๊ณ ๋ฌผ์ด๋ณผ ์ฌ๋์ด ์์ผ๋ฉด ๊ทธ ์๋ฆฌ์์ ์์ ์ด ๋ฉ์ท๋ค.
Table of contents
Open Table of contents
์ฆ์ โ ์ด๋ ์๋์ง ๋ชฐ๋๋ค
์ ์ฅ์๊ฐ ๋ช ๊ฐ์ธ์ง๋ ๋ชฐ๋๋ค.
$ ssh git-server 'ls /srv/git/'
23๊ฐ๊ฐ ๋์๋๋ฐ ์ด๋ฆ๋ง ๋ด์๋ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๋ ๊ฒ์ด ์์ฌ ์์๋ค.
elearn-web.git
elearn-api.git
elearn-batch.git
lms-old.git
lms-new.git
test-repo.git
backup-2017.git
...
lms-old ์ lms-new ๊ฐ ๋ฌด์์ด๊ณ elearn ๊ณผ ์ด๋ค ๊ด๊ณ์ธ์ง ์ ์ ์์๋ค.
์ด๊ฒ์ ๊ธฐ์ต๋ ฅ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ ์ฅ์ ๋ชฉ๋ก์ด ์๋ค๋ ๋ฌธ์ ์๋ค. ์ ๋ถ ํ์ ํ์ง ๋ชปํ๋๋ผ๋ ์ง๊ธ ์๋ ๊ฒ์ ์ ์ด ๋๋ฉด ๊ทธ๊ฒ๋ถํฐ๋ ์ ๋ฌผ์ด๋ด๋ ๋๋ค.
๊ฒ์ฆ โ ํ๋์ฉ ์ด์ด ๋ดค๋ค
์ ๋ถ ์ฝ์ ํ์๋ ์์๋ค.
$ for r in $(ssh git-server 'ls /srv/git/'); do
echo "=== $r"
git ls-remote "git@git-server:/srv/git/$r" HEAD 2>/dev/null | head -1
git clone --depth 1 --quiet "git@git-server:/srv/git/$r" /tmp/chk 2>/dev/null
ls /tmp/chk | head -5
git -C /tmp/chk log -1 --format='%ci %s'
rm -rf /tmp/chk
done
๋ง์ง๋ง ์ปค๋ฐ ๋ ์ง์ ์ต์์ ํ์ผ๋ง ๋ด๋ ๋๋ถ๋ถ ๊ฐ๋ ธ๋ค.
elearn-web 2019-08-30 Spring Boot ํ๋ก์ ํธ ํ์ฌ ์ฐ๋ ๊ฒ
lms-old 2016-04-11 CodeIgniter ํ๋ก์ ํธ ์ ์
test-repo 2015-02-03 ๋น ์ ์ฅ์ ์ ์
๋ง์ง๋ง ์ปค๋ฐ์ด 3๋ ๋๊ฒ ์ ๋ฐ๋ ๊ฒ์ด ์ํ ๊ฐ์๋ค.
๊ฒฐ๊ณผ โ ํ๋ก ๋ง๋ ๊ฒ
ํ์ธํ ๊ฒ์ ํ๋ก ์ ๋ฆฌํ๋ค.
์ ์ฅ์ ๋ด์ฉ ์ํ ๋ฐฐํฌ ๋์ ๋ด๋น
elearn-web ํ์ต ํ๋ฉด ์ด์ web01,web02 ...
elearn-api ์ธ๋ถ ์ฐ๋ API ์ด์ api01 ...
elearn-batch ๋ฐฐ์น ์ด์ batch01 ...
lms-old 2016๋
์ด์ ์์คํ
๋ณด๊ด ์์ -
test-repo ๋น ์ ์ฅ์ ํ๊ธฐ ์์ -
๋ฌด์์ด ์ด์์ ๋๊ฐ๊ณ ๋ฌด์์ด ์ ๋๊ฐ๋์ง๊ฐ ๊ฐ๋ ธ๋ค.
์ด ํ๊ฐ ์์ผ๋ ์ด๋ ์๋๋์ ๋ฐ๋ก ๋ต์ด ๋๊ณ ๋ฐฐํฌ ๋์ ๊ณผ ๋ด๋น ์ด ๋์ค์ ๊ฐ์ฅ ์์ฃผ ์ฐธ์กฐ๋ ์ด์ด์๋ค.
ํ๋จ ๊ธฐ์ค โ ๋ณด๊ด๊ณผ ํ๊ธฐ
์ ์ฐ๋ ์ํ ๊ฐ๋ฅผ ์ด๋ป๊ฒ ํ ์ง ์ ํ๋ค.
๋ณด๊ด ๋์ค์ ๋ณผ ์ ์๋ค. ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋๊ณ ๋ชฉ๋ก์ ๋จ๊ธด๋ค
ํ๊ธฐ ์๋ฌด๋ ์ ๋ณธ๋ค. ๋ง์ง๋ง ์ํ๋ฅผ ํ์ผ๋ก ๋ด๋ฆฌ๊ณ ์ ์ฅ์๋ฅผ ์์ค๋ค
๋ณด๊ด ์ผ๋ก ์ ํ ๊ฒ์ ์ง์ฐ์ง ์๊ณ ์ฐ๊ธฐ๋ง ๋ง์ ๋๋ค.
ํ๊ธฐํ๊ธฐ๋ก ํ ์ ๋ ๋ฐ๋ก ์ ์ง์ฐ๊ณ ํ์ผ๋ก ๋ด๋ ค ๋๋ค.
$ git clone --mirror "git@...:test-repo.git"
$ tar czf test-repo-20190831.tar.gz test-repo.git
--mirror ๋ก ์ด๋ ฅ๊น์ง ํต์งธ๋ก ๋จ๊ฒจ ๋์ค์ ๋์ด๋ฆด ์ ์๊ฒ ํ๋ค.
์ฃผ์ โ ๋ชฉ๋ก์ ์๋ ์ ์ฅ์
์ ์ฅ์๋ผ๋ฆฌ ์๋ก ์ฐธ์กฐํ๊ณ ์๋ ๊ฒ์ด ์์๋ค.
$ grep -rn "git@\|https://git" --include=composer.json --include=package.json .
elearn-web ์ด ๋ค๋ฅธ ์ ์ฅ์๋ฅผ ์์กด์ผ๋ก ๊ฑธ๊ณ ์์๋ค.
"repositories": [{"type": "vcs", "url": "git@git-server:/srv/git/elearn-common.git"}]
elearn-common ์ด ์๋ฒ ๋ชฉ๋ก์ ์์๊ณ ๋ค๋ฅธ ์๋ฆฌ์ ์์๋ค.
์์กด์ ๋ฐ๋ผ๊ฐ๋ ๋ชฉ๋ก์ ์๋ ์ ์ฅ์๊ฐ ๋์์ผ๋ ์๋ฒ ๋ชฉ๋ก๋ง์ผ๋ก๋ ์ ๋ถ๊ฐ ์๋์๋ค.
$ grep -rhn "git clone\|git@" scripts/ docs/ 2>/dev/null | grep -oE "git@[^ ']+" | sort -u
๋ฐฐํฌ ์คํฌ๋ฆฝํธ์ ๋ฌธ์์์๋ ์ฃผ์๋ฅผ ๋ฝ์ผ๋ ์ ์ด ๋ ๋์๋ค.
ํ๋๋ ์ธ๋ถ ์๋น์ค์ ์์๊ณ ๋์ ๊ฐ์ธ ๊ณ์ ์ ์์๋ค. ๊ฐ์ธ ๊ณ์ ์ ์๋ ๊ฒ์ ๊ทธ ์ฌ๋์ด ์์ด์ง๋ฉด ๋ชป ๋ฐ์ผ๋ฏ๋ก ์ ๋ถ ํ์ฌ ์๋ฒ๋ก ์ฎ๊ฒผ๋ค.
์ฌ๋ฐ ๋ฐฉ์ง โ ์ด๋ฆ ๊ท์น๊ณผ ๋ชฉ๋ก ์ ์ง
์ ์ ์ฅ์๋ฅผ ๋ง๋ค ๋์ ์ด๋ฆ ๊ท์น๋ ์ ํ๋ค.
<์ ํ>-<์ญํ >
elearn-web
elearn-api
elearn-batch
elearn-common
test ์ temp ์ backup ๊ฐ์ ์ด๋ฆ์ ๊ธ์งํ๋๋ฐ ๊ทธ๋ฐ ์ด๋ฆ์ด ์๊ตฌํ ๋จ๋๋ค.
๋ชฉ๋ก์ด ๋ก์ง ์๊ฒ ํ๋ ์ฅ์น๋ ๋๋ค.
#!/bin/sh
# ์ 1ํ
known=$(awk -F'|' 'NR>2 {print $2}' docs/repositories.md | tr -d ' ')
actual=$(ssh git-server 'ls /srv/git/' | sed 's/\.git$//')
comm -13 <(echo "$known" | sort) <(echo "$actual" | sort)
comm ์ผ๋ก ๋ชฉ๋ก์ ์๋ ์ ์ฅ์๊ฐ ์๊ธฐ๋ฉด ๋์ค๊ฒ ํ๋ค.
๋ชฉ๋ก์ ๋ง๋ ์๊ฐ๋ถํฐ ๋ก๊ธฐ ์์ํ๋ค. ์ ์งํ๋ ์ฅ์น๊ฐ ์์ผ๋ฉด ๋ค์ ์ฒ์์ผ๋ก ๋์๊ฐ๋ค.
์ ๋ฆฌ
- ์ ์ฅ์๊ฐ ๋ช ๊ฐ๊ณ ๋ฌด์์ธ์ง๋ถํฐ ์ ๋๋ค
- ๋ง์ง๋ง ์ปค๋ฐ ๋ ์ง์ ์ต์์ ํ์ผ๋ง ๋ด๋ ๋๋ถ๋ถ ๊ฐ๋ฆฐ๋ค
- ํ์ ์ด์์ ๋๊ฐ๋์ง์ ๋ด๋น์ ์ ๋๋ค
- ์ ์ฐ๋ ๊ฒ์ ๋ณด๊ด๊ณผ ํ๊ธฐ๋ก ๋๋๋ค
- ํ๊ธฐ๋ ํ์ผ๋ก ๋ด๋ ค ๋๊ณ ์ง์ด๋ค
- ์์กด์ ๋ฐ๋ผ๊ฐ๋ฉด ๋ชฉ๋ก์ ์๋ ์ ์ฅ์๊ฐ ๋์จ๋ค
- ์คํฌ๋ฆฝํธ์ ๋ฌธ์์์๋ ์ฃผ์๋ฅผ ๋ฝ๋๋ค
- ๊ฐ์ธ ๊ณ์ ์ ์๋ ๊ฒ์ ์ฎ๊ธด๋ค
- ์ด๋ฆ ๊ท์น์ ์ ํ๊ณ ์์๋ผ๋ ์ด๋ฆ์ ๊ธ์งํ๋ค
- ๋ชฉ๋ก์ ์๋ ๊ฒ์ด ์๊ธฐ๋ฉด ์๊ฒ ํ๋ค