ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] Repo ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ
    Git 2021. 2. 12. 21:05
    ๋ฐ˜์‘ํ˜•

    Repo๋ž€?

    • Repo๋ž€ ํ•„์š”์‹œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Git repository๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ Android ๊ฐœ๋ฐœ workflow๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • Repo๋Š” Git์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ Android์˜ ์ปจํ…์ŠคํŠธ์—์„œ Git์„ ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Repo๋Š” manifest ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ Android ํ”„๋กœ์ ํŠธ์— Git ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ์•„๋‘ก๋‹ˆ๋‹ค.
    • repo ๋ช…๋ น์–ด๋Š” ๊ฒฝ๋กœ ์–ด๋””์—๋‚˜ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.
    • ์ฐธ์กฐ(https://source.android.com/setup/develop#installing-repo)

    Repo ์„ค์น˜

    # Debian/Ubuntu
    $ sudo apt-get install repo
    
    # Gentoo.
    $ sudo emerge dev-vcs/repo

    ๋งŽ์€ ๋ฐฐํฌํŒ์— repo๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    $ mkdir -p ~/.bin
    $ PATH="${HOME}/.bin:${PATH}"
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
    $ chmod a+rx ~/.bin/repo

    repo ๋ช…๋ น์–ด๋“ค์ด python ์Šคํฌ๋ฆฝํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


    Manifest ํŒŒ์ผ

    • repo manifest ํŒŒ์ผ์€ Git์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํด๋”๋“ค์— ๋Œ€ํ•œ repo ํด๋ผ์ด์–ธํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • manifest์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ์ตœ์ƒ์œ„ ํด๋”์˜ default.xml ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Git ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
    • manifest๋Š” Git ์ €์žฅ์†Œ์— ๋ณด๊ด€๋˜๋ฏ€๋กœ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, repo sync๋ฅผ ํ†ตํ•ด ๋ชจ๋“  Git ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    # default.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
        <remote
            name="origin"
            fetch="ssh://git@github.com"/>
        <default revision="master" remote="origin"/>
    
        <project
            path="Item1"
            name="ows3090/RepoItem1"/>
        <project
            path="Item2"
            name="ows3090/RepoItem2"/>
        <project
            path="Item3"
            name="ows3090/RepoItem3"/>
    </manifest>
    • RepoTest๋ผ๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋‹ค์Œ default.xml ํŒŒ์ผ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • manifest ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ๋ฌด์กฐ๊ฑด default.xml์ผ ํ•„์š”๋Š” ์—†๊ณ , ๋‹ค๋ฅธ ์ด๋ฆ„์„ ํ•  ๊ฒฝ์šฐ repo init์‹œ์— -m ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ๋ช…์„ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํŒŒ์ผ๋ช…์„ ์ ์ง€ ์•Š์„ ๊ฒฝ์šฐ default.xml ํŒŒ์ผ๋ช…์„ manifest ํŒŒ์ผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

    < manifest >
    ํŒŒ์ผ ๋ฃจํŠธ ์š”์†Œ

    < remote >
    ํ•˜๋‚˜ ์ด์ƒ์˜ remote element๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตต๊ฒŒ ํ‘œ์‹œํ•œ ํƒœ๊ทธ๋Š” ํ•„์ˆ˜๋กœ ์žˆ์–ด์•ผ ํ•  ํƒœ๊ทธ๋“ค์ž…๋‹ˆ๋‹ค.

    • name : manifest file์—์„œ ์œ ์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๊ฐ ํ”„๋กœ์ ํŠธ์˜ .git/config์— ์ ํ˜€์žˆ๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์œผ๋กœ ์ง€์ •๋œ ์ด๋ฆ„
    • fetch : ์ด remote ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ Git URL prefix, ์ด prefix์— project์˜ name์ด ์ถ”๊ฐ€๋˜์–ด cloneํ•ฉ๋‹ˆ๋‹ค.
    • alias : name์— ์ ํ˜€์žˆ๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ ์ด๋ฆ„์„ overrideํ•œ ์ด๋ฆ„
    • pushurl : ์ด remote๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  project๋“ค์— ๋Œ€ํ•œ Git push ULR prifix, ์ด preifx์— project์˜ name์ด ์ถ”๊ฐ€๋˜์–ด pushํ•ฉ๋‹ˆ๋‹ค. pushurl์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ fetch URL๋กœ push ๋ฉ๋‹ˆ๋‹ค.
    • review : repo upload ์‹œ review ์‹œ์Šคํ…œ์— ์—…๋กœ๋“œํ•  gerrit์˜ ํ˜ธ์ŠคํŠธ ๋„ค์ž„
    • revision : Git branch ์ด๋ฆ„

    < default >
    default element๋Š” ์˜ค์ง ํ•˜๋‚˜๋งŒ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. project ํƒœ๊ทธ๊ฐ€ ์ž์‹ ์˜ remote ๋˜๋Š” revision ์†์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ตต๊ฒŒ ํ‘œ์‹œํ•œ ํƒœ๊ทธ๋Š” ํ•„์ˆ˜๋กœ ์žˆ์–ด์•ผ ํ•  ํƒœ๊ทธ๋“ค์ž…๋‹ˆ๋‹ค.

    • remote : remote element์— ์ •์˜๋œ ์›๊ฒฉ ์ €์žฅ์†Œ ์ด๋ฆ„
    • revision : project์˜ revision ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜๋Š” Git branch ์ด๋ฆ„
    • dest-branch : project์˜ des-branch ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜๋Š” Git branch ์ด๋ฆ„
    • sync-j : sync ์ž‘์—… ์‹œ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•  ๊ฐฏ์ˆ˜
    • sync-c : true์‹œ, revision์— ์ฃผ์–ด์ง„ git branch๋งŒ sync ํ•ฉ๋‹ˆ๋‹ค.
    • sync-s : true์‹œ, sub-project๋„ sync ํ•ฉ๋‹ˆ๋‹ค.

    < project >
    project element๋Š” ํ•˜๋‚˜ ์ด์ƒ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ element๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น git repository์— cloneํ•ฉ๋‹ˆ๋‹ค. ๊ตต๊ฒŒ ํ‘œ์‹œํ•œ ํƒœ๊ทธ๋Š” ํ•„์ˆ˜๋กœ ์žˆ์–ด์•ผ ํ•  ํƒœ๊ทธ๋“ค์ž…๋‹ˆ๋‹ค.

    • name : project ์ด๋ฆ„, Git remote URL์€ ${remote_fetch}/${project_name}.git ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
    • path : ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ์˜ ์ƒ๋Œ€์ ์ธ ๊ฒฝ๋กœ, ์ด ๊ฒฝ๋กœ์— project๊ฐ€ clone ๋ฐ›์•„์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ project ์ด๋ฆ„์œผ๋กœ ํด๋” ์ƒ์„ฑํ•˜์—ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • remote : remote ํƒœ๊ทธ์— ์ •์˜๋œ name
    • revision : ์ด project๊ฐ€ tracking ํ•˜๊ธธ ์›ํ•˜๋Š” Git branch ์ด๋ฆ„
    • dest-branch : repo upload์‹œ์— ์‚ฌ์šฉ๋  Git branch ์ด๋ฆ„
    • groups : ์ด project๊ฐ€ ์†ํ•ด ์žˆ๋Š” group ๋ฆฌ์ŠคํŠธ
    • sync-c : true์‹œ, revision์— ์ฃผ์–ด์ง„ git branch๋งŒ sync ํ•ฉ๋‹ˆ๋‹ค.
    • sync-s : true์‹œ, sub-project๋„ sync ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฐธ์กฐ(https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md)

    repo์˜ init ๋ช…๋ น์–ด

    $ repo init -u url [options]

    ํ˜„์žฌ ํด๋”์— Repo๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” Repo ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ํ‘œ์ค€ Android manifest ํŒŒ์ผ์˜ Git ์ €์žฅ์†Œ๊ฐ€ ํฌํ•จ๋œ .repo ํด๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • -u : manifest๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ URL์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • -m : ์ €์žฅ์†Œ์—์„œ manifest ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. manifest ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด default.xml์ž…๋‹ˆ๋‹ค.
    • -b : branch๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž์„ธํ•œ ์˜ต์…˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๊ณต์‹๋ฌธ์„œ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


    repo์˜ sync ๋ช…๋ น์–ด

    $ repo sync [project-list] [options]

    ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋กœ์ปฌ ํŒŒ์ผ๋“ค์„ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์ „์ฒด Git ์ €์žฅ์†Œ์— ๊ฑธ์ณ git fetch๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. project-list๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด repo sync ์‹คํ–‰ ์‹œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ sync ํ•ฉ๋‹ˆ๋‹ค.

    # ํ”„๋กœ์ ํŠธ๊ฐ€ sync ๋œ ์ ์ด ์—†์„ ๊ฒฝ์šฐ, git clone ๊ณผ ๊ฐ™์ด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ํŒŒ์ผ์ด ๋กœ์ปฌ ํŒŒ์ผ๋กœ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.
    $ git clone
    
    # ์ด์ „์— ํ”„๋กœ์ ํŠธ๊ฐ€ sync ๋œ ์ ์ด ์žˆ์„ ๊ฒฝ์šฐ
    $ git remote update
    $ git rebase origin/branch
    • -c : manifest branch๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • -j : repo sync๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์™„๋ฃŒ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CPU ์ˆ˜๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” nproc --all ์ž…๋ ฅํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž์„ธํ•œ ์˜ต์…˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๊ณต์‹๋ฌธ์„œ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


    manifest ๊ณ„์ธต ๊ตฌ์กฐ

    AOSP๋ฅผ repo๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์‹œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ›์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    remove-project ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์ œ์™ธํ•˜์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ default.xml์˜ project ํƒœ๊ทธ ์ค‘๊ฐ„์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์€ ๋‚˜์ค‘์— rebase์‹œ ์ถฉ๋Œ์ด ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด xml์„ ์ƒ์„ฑํ•˜์—ฌ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ฆ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
        <remote
            name="origin"
            fetch="ssh://git@github.com"/>
        <default revision="master" remote="origin"/>
    
        <project
            path="Item1"
            name="ows3090/RepoItem1"/>
        <project
            path="Item2"
            name="ows3090/RepoItem2"/>
        <project
            path="Item3"
            name="ows3090/RepoItem3"/>
    
        <repo-hooks in-project="ows3090/RepoItem2" enabled-list="pre-upload"/>
        <include name="removeItem.xml"/>
    </manifest>

    ows3090/RepoItem2์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ repo-hooks ํƒœ๊ทธ์™€ include ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    repo-hooks ํƒœ๊ทธ๋กœ ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ ์ด์ „์— include ๋˜๋Š” xml์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
        <remove-project name="ows3090/RepoItem2"/>
    </manifest>

    ๋‹ค์Œ์€ removeItem.xml์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ removeํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ œ์™ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ด๋„ Item2 ํ”„๋กœ์ ํŠธ ์ œ์™ธํ•˜๊ณ  cloneํ•˜์˜€์Šต๋‹ˆ๋‹ค.


    ๊ฐ์ข… Repo ๋ช…๋ น์–ด

    ๋ฐ˜์‘ํ˜•

    'Git' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Git] Remote Repository ๋ช…๋ น์–ด  (0) 2021.05.30
    [Git] Git Submodule(์„œ๋ธŒ๋ชจ๋“ˆ) ์ด๋ž€?  (0) 2021.02.03
    [Git] SSH Key ์ƒ์„ฑ ๋ฐ ์„ค์ •  (0) 2020.12.11
Designed by Tistory.