Skip to content
isdnetworks
Go back

์ €์žฅ์†Œ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ถ€ํ„ฐ ์ ์—ˆ๋‹ค

์ธ๊ณ„๋ฐ›๊ณ  ๋‚˜์„œ ์ด ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ์–ด๋”” ์žˆ๋А๋ƒ๋ฅผ ๋งค๋ฒˆ ๋ฌผ์–ด๋ดค๊ณ  ๋ฌผ์–ด๋ณผ ์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ์ž‘์—…์ด ๋ฉˆ์ท„๋‹ค.

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 ์œผ๋กœ ๋ชฉ๋ก์— ์—†๋Š” ์ €์žฅ์†Œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‚˜์˜ค๊ฒŒ ํ–ˆ๋‹ค.

๋ชฉ๋ก์€ ๋งŒ๋“  ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋‚ก๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ์œ ์ง€ํ•˜๋Š” ์žฅ์น˜๊ฐ€ ์—†์œผ๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์ •๋ฆฌ


Share this post on:

Previous Post
๋ฌธ์„œ์— ์—†๋Š” ์‹ค์ œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„ ์ ์—ˆ๋‹ค
Next Post
์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋‹ˆ ํ˜ธ์ถœ์ฒ˜๊ฐ€ ๋กค๋ฐฑํ•œ๋‹ค