Intro Github์ ์์ค์ฝ๋๋ฅผ ์ฌ๋ฆด ๋ ์ํธํ ํ ์ ์๋ ํด ์ฌ๋ฆด ๋์๋ ์ํธํํด์ ์ฌ๋ฆฌ๊ณ ๋ค์ด๋ก๋ ์์๋ ๋ณตํธํ ํด์ค๋ค. ๋ณด์ํค๋ ํจ์ค์๋, ์ค์ ์ค์ ์ ๋ณด ๋ฑ์ด ๊ณต๊ฐ์ฉ ๋ฟ๋ง ์๋๋ผ ๋น๊ณต๊ฐ์ฉ ์ ์ฅ์์ ์ฌ๋ฆด ๋์๋ ์ ์ฉํ๋ค. ์์ธ๋ฌ vimwiki๋ ์ง๊ทนํ ๊ฐ์ธ์ ์ธ ๋ฌธ์๋ฅผ ์ ์ฅํ ๋ github๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ์๋ ๋งค์ฐ ์ ์ฉํ๋ค. Github ์์ฒด๊ฐ ํดํน๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , github์ ์๋ฃ๋ ๋ชจ๋ ๊นํ๋ธ์ ์ฌ์ฐ์ด๋ฏ๋ก ๋ด ์๋ฃ๋ฅผ ๋ณดํธํ ํ์๊ฐ ์๋ค. ์๋ฌด๋ฆฌ ๋น๊ณต๊ฐ์ฉ์ด๋ผ ํ ์ง๋ผ๋ ๊บผ๋ฆผ์งํ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ด๋ ๊ฒ ํด ๋๋ฉด ์ข์ ์ ์ PC๊ฐ ๋ฐ๋์ด๋ ์์
์ฅ์๊ฐ ๋ฐ๋์ด๋ ๋ชจ๋ ์์ ํ๊ฒ ๊ฐ์ธ์๋ฃ๋ฅผ ๋๊ธฐํํ ์ ์๋ค. ๋ฌผ๋ก ๊ฐ์ธ์๋ฃ๋ฅผ ์๋ฒ๋
ธํธ๋ ๊ตฌ๊ธ๊ณ์ ์ ์ ์ฅํด๋ ๋๊ฒ ์ง๋ง ์ด๊ณณ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ณด์์ํ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋ํ ๊ฐ๋ฐ์, ์๊ฐ ๋ฑ์ ์์ฝ๊ฒ github๋ฅผ ํตํด ์ ์ฅ์๋ฅผ ๋๊ณ ์์
์ ํ๋ ๊ฒ์ด ํธ๋ฆฌํ๋ค. ๊ทธ๋ ๊ธฐ์ ์๊ณ ๊ฐ๋ณ๊ณ ์์กด์ฑ๋ ์๋ git-crypt๋ฅผ ํ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค. ์๋ ์์ ํ๊ฒ ์ผ๋ ์ ์ฅ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ธ ๊ฒฝ์ฐ ๊ทธ ๋งํผ ๊ด๋ฆฌํ ํค๊ฐ ๋์ด๋๊ณ ๋ฐ๋ก ๋ณด๊ดํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ํธํ๊ฐ ํ์ํ ํ์ผ์ ๊ฐ๊ธ์ ํ ์ ์ฅ์์ ๋ชจ์ผ๊ณ ํ๋์ ํค๋ง ๋ฐ๋ก USB๋ ๊ธฐํ ์ฅ์์ ๋ณด๊ดํด ๋๋ ๊ฒ์ด ์ข๊ฒ ๋ค. ๋ง์ฝ git-crypt์ ์ํด ์๊ธด ํค๋ ๊นํ๋ธ์ ์ ์ฅํ๋ค๋ฉด ์๊ธฐ ๋ชจ์์ ๋น ์ง๋ฏ๋ก ๋ณ๋๋ก ๋ฐฑ์
๋ณด๊ดํด์ผ ํ๋ค. Install $ sudo apt install git-crypt # Ubuntu, Debian $ doas apk add git-crypt # Alpine Using git-crypt ์ฃผ์์ฌํญ: git-crypt๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ ์ํธํ ํ ์ ์๋ค. ๋ฐ๋ผ์ github์์ ์๋ก์ด ์ ์ฅ์๋ฅผ ๋ง๋ค๊ณ ์๋ ์ ์ฐจ๋ฅผ ์งํํด์ผ ํ๋ค. ์๋ your_secret_file ๊ณผ your_secret_directory๋ ์ ์ฅ์ ๋ด์ ์ํธํํ ํ์ผ ๋๋ ํด๋. $ git clone git@github.com:<github_user>/<your_progject_name> $ cd <your_project_name> $ git-crypt init $ cat <<EOF > .gitattributes your_secret_file_name filter=git-crypt diff=git-crypt *.key filter=git-crypt diff=git-crypt your_secret_dir/** filter=git-crypt diff=git-crypt EOF $ echo "hello world" > your_secret_file $ echo "hello world" > your_secret_dir/file1 $ git add . && git commit "update files" && git push ์์ ์ ๊นํ๋ธ ์ ์ ์์ ๊ฐ์ ์ฌ๋ฆฐ ํ์ผ์ด ์ํธ์ ๋์๋์ง ๋ก๊ทธ์ธํด์ ํ์ธํ๋ค. ๋ณดํต์ ๊ฒฝ์ฐ ์ ์ค์ ์ด ์ ๋์์ผ๋ฉด ํ์์ ๋๋ก git์ ์ฌ์ฉํ๋ฉด ์ ์ฅ์ ๊ด๋ฆฌ๊ฐ ๋๋ค. ์์ฑ๋ ์ํธํค ๊ด๋ฆฌ ์์ git-crypt init ๋ช
๋ น์ ์ํํ๋ฉด .git/git-crypt/keys๋ก ์ด๊ธฐํ๋๊ณ ํค๊ฐ ์์ฑ, ๋ณด๊ด๋๋ค. Symmetric Mode: ์์ฑ๋ ํค๋ ๋ก์ปฌ์๋ง ์กด์ฌํ๋ฏ๋ก ์ด ํค๋ฅผ USB ๋ฑ์ ์ ์ฅํด ๋์๋ค๊ฐ ๋ค๋ฅธ ๊ณณ์์ ๊นํ๋ธ ์ ์ฅ์๋ฅผ ๋ค์ด ๋ฐ์ ํ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. GPG Mode: ๋ํ ๋ค๋ฅธ ์ฌ์ฉ์์ ํค๋ฅผ ์ถ๊ฐ์์ผ ๊ทธ ์ฌ์ฉ์๊ฐ ์ ์ฅ์์ ์ ๊ทผํ ์ ์๋๋ก ํ ์ ์๋ค. (์์ ํฌํจ) GPG Mode - ์์ ๋๋ ๋ค๋ฅธ ์ฌ์ฉ์์ ํค๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ $ git-crypt add-gpg-user <USER_ID> # ์ฃผ ์ฌ์ฉ์๋ชจ๋: USER_ID is Public GPG key ID ... $ git clone git@github.com:<github_user>/<your_progject_name> # ํ๋ฝ๋ฐ์ ์ฌ์ฉ์๋ชจ๋ $ cd <your_project_name> $ git-crypt unlock Symmetric Mode - ํค๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฌ์ฉ์(๋ณดํต ์๊ธฐ์์ )์ด ์ ์ฅ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ $ git-crypt export-key <path_to_your_keyfile> # ์ฃผ ์ฌ์ฉ์๊ฐ ํค๋ฅผ ๋ฐฑ์
ํ๊ธฐ ... $ git clone git@github.com:<github_user>/<your_progject_name> # ๋ค๋ฅธ ๊ณณ์์ ๋ณตํธํ ํ๊ธฐ $ cd <your_project_name> $ git-crypt unlock <path_to_your_keyfile> # ๋ฐฑ์
ํด๋ ํคํ์ผ์ ์ด์ฉํด ๋ณตํธํํ๊ธฐ ์ฐธ๊ณ ์ฌํญ .gitattributes ํ์ผ ์์ ์ ์ํธํ๋์๋ ์๋๋ค๊ณ ๋ฉ๋ด์ผ์ ๋์ ์๋ค. .gitattributes ํ์ผ์ dir/**์์ **์ด ๋ ๊ฐ์ธ ์ด์ ๋ ์ดํ ์๋ธ ๋๋ ํ ๋ฆฌ์์๋ ์ ์ฉ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋นํ ๋ง์ ํ์ผ์ด๋ ํด๋์ ์ ์ฉํ๋ ๊ฒ์ ์ข์ง ์๋ค. ์์คํ์ผ์ด๋ ํ
์คํธ ํ์ผ์ ์ํธํ ํ๋ ๋ฐ ์ ํฉํ๊ณ ์ด์งํ์ผ์ด๋ ๋ฐ์ดํฐ ํ์ผ์๋ ๊ทธ๋ฆฌ ์ ํฉํ์ง ์๋ค. ํ์ผ์ด๋ฆ์ด๋ ํ์ผ์ ๋ํ ๋ฉํ์ ๋ณด๋ ์ํธํํ์ง ๋ชปํ๋ค. ์ฆ ํ์ผ์ ๋ด์ฉ์ ์ํธํ ํ๋ค. REFERENCE Git-Crypt Home - https://www.agwa.name/projects/git-crypt/ git-crypt github - https://github.com/AGWA/git-crypt managing secrets with git crypt - https://dzone.com/articles/managing-secrets-with-git-crypt