Post

Upgrade Blog core to v7.2.0 (feat. merge conflict)

부지런하게 업스트림 코드를 따라가자

Merge 를 통해 발생하는 conflict 해결하기

Upgrade Blog core to v7.2.0 (feat. merge conflict)

블로그 코어 업데이트하기

얼마 전 블로그 코어를 업그레이드에 대한 내용은 해당 게시글에서 확인할 수 있다. 얼마 지나지 않아 새로운 버전이 릴리즈되어 이전과 같은 불상사를 막고자 미리 병합을 시도하여 따라가고자 한다.

최신 태그를 기반으로 그러니까 현재 블로그 코어에 반영되지 않은 최신 업스트림 릴리즈 태그를 기반으로 병합할 브랜치를 만들어주고서 병합할 준비를 시작한다.

1
$ git merge next # next 는 upstream 의 v7.2.0 을 기반으로 추적하는 브랜치이다.

해당 명령어를 실행했을 때 자동 병합이 되지 않고 충돌이 난다면 블로그 코어 파일들을 수정했을 경우가 높다. git 은 어떤 파일이 병합 실패했는지 알려주고 하나하나 수정 후 커밋해줘야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CONFLICT (modify/delete): .github/workflows/cd.yml deleted in HEAD and modified in next.  Version next of .github/workflows/cd.yml left in tree.
CONFLICT (modify/delete): .github/workflows/ci.yml deleted in HEAD and modified in next.  Version next of .github/workflows/ci.yml left in tree.
CONFLICT (modify/delete): .github/workflows/commitlint.yml deleted in HEAD and modified in next.  Version next of .github/workflows/commitlint.yml left in tree.
CONFLICT (modify/delete): .github/workflows/publish.yml deleted in HEAD and modified in next.  Version next of .github/workflows/publish.yml left in tree.
CONFLICT (modify/delete): .github/workflows/stale.yml deleted in HEAD and modified in next.  Version next of .github/workflows/stale.yml left in tree.
자동 병합: .gitignore
충돌 (내용): .gitignore에 병합 충돌
자동 병합: _includes/head.html
자동 병합: _javascript/categories.js
충돌 (내용): _javascript/categories.js에 병합 충돌
자동 병합: _javascript/misc.js
충돌 (내용): _javascript/misc.js에 병합 충돌
자동 병합: _javascript/modules/components.js
충돌 (내용): _javascript/modules/components.js에 병합 충돌
자동 병합: _layouts/default.html
자동 병합: _layouts/home.html
자동 병합: _layouts/post.html
CONFLICT (modify/delete): _posts/2019-08-09-getting-started.md deleted in HEAD and modified in next.  Version next of _posts/2019-08-09-getting-started.md left in tree.
CONFLICT (modify/delete): _sass/addon/commons.scss deleted in next and modified in HEAD.  Version HEAD of _sass/addon/commons.scss left in tree.
자동 병합: _sass/pages/_post.scss
CONFLICT (file location): _sass/colors/dark-syntax.scss added in HEAD inside a directory that was renamed in next, suggesting it should perhaps be moved to _sass/themes/dark-syntax.scss.
CONFLICT (file location): _sass/colors/dark-typography.scss added in HEAD inside a directory that was renamed in next, suggesting it should perhaps be moved to _sass/themes/dark-typography.scss.
CONFLICT (file location): _sass/colors/light-syntax.scss added in HEAD inside a directory that was renamed in next, suggesting it should perhaps be moved to _sass/themes/light-syntax.scss.
CONFLICT (file location): _sass/colors/light-typography.scss added in HEAD inside a directory that was renamed in next, suggesting it should perhaps be moved to _sass/themes/light-typography.scss.
CONFLICT (modify/delete): tools/init.sh deleted in HEAD and modified in next.  Version next of tools/init.sh left in tree.
CONFLICT (modify/delete): tools/release.sh deleted in HEAD and modified in next.  Version next of tools/release.sh left in tree.
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.j

병합 충돌 해결하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
현재 브랜치 master
브랜치가 'origin/master'보다 28개 커밋 뒤에 있고, 앞으로 돌릴 수 있습니다.
  (로컬 브랜치를 업데이트하려면 "git pull"을 사용하십시오)

병합하지 않은 경로가 있습니다.
  (충돌을 바로잡고 "git commit"을 실행하십시오)
  (병합을 중단하려면 "git merge --abort"를 사용하십시오)

커밋할 변경 사항:
	새 파일:       .github/workflows/pr-filter.yml
	새 파일:       .github/workflows/scripts/pr-filter.js
  { . . . }
	수정함:        _sass/main.scss
	이름 바꿈:     _sass/layout/archives.scss -> _sass/pages/_archives.scss
	이름 바꿈:     _sass/layout/categories.scss -> _sass/pages/_categories.scss
	이름 바꿈:     _sass/layout/category-tag.scss -> _sass/pages/_category-tag.scss
	이름 바꿈:     _sass/layout/home.scss -> _sass/pages/_home.scss
	새 파일:       _sass/pages/_index.scss
	이름 바꿈:     _sass/layout/post.scss -> _sass/pages/_post.scss
	새 파일:       _sass/pages/_search.scss
	이름 바꿈:     _sass/layout/tags.scss -> _sass/pages/_tags.scss
	이름 바꿈:     _sass/colors/typography-dark.scss -> _sass/themes/_dark.scss
	새 파일:       _sass/themes/_light.scss
	삭제함:        _sass/variables-hook.scss
	수정함:        assets/css/jekyll-theme-chirpy.scss
	수정함:        assets/feed.xml
	수정함:        assets/lib
	수정함:        docs/CHANGELOG.md
	수정함:        jekyll-theme-chirpy.gemspec
	수정함:        package.json
	삭제함:        purgecss.config.js
	새 파일:       purgecss.js
	수정함:        rollup.config.js

병합하지 않은 경로:
  (해결했다고 표시하려면 알맞게 "git add/rm <파일>..."을 사용하십시오)
	이 쪽에서 삭제: .github/workflows/cd.yml
	이 쪽에서 삭제: .github/workflows/ci.yml
	이 쪽에서 삭제: .github/workflows/commitlint.yml
	이 쪽에서 삭제: .github/workflows/publish.yml
	이 쪽에서 삭제: .github/workflows/stale.yml
	양쪽에서 수정:  .gitignore
	양쪽에서 수정:  _javascript/categories.js
	양쪽에서 수정:  _javascript/misc.js
	양쪽에서 수정:  _javascript/modules/components.js
	이 쪽에서 삭제: _posts/2019-08-09-getting-started.md
	저 쪽에서 삭제: _sass/addon/commons.scss
	이 쪽에서 추가: _sass/themes/dark-syntax.scss
	이 쪽에서 추가: _sass/themes/dark-typography.scss
	이 쪽에서 추가: _sass/themes/light-syntax.scss
	이 쪽에서 추가: _sass/themes/light-typography.scss
	이 쪽에서 삭제: tools/init.sh
	이 쪽에서 삭제: tools/release.sh

rm vs rm –cached

병합 충돌을 해결할 때 위 명령어를 사용해야하고 또 다른 명령어나 복합적으로 확인해야 하는 사항들이 많을 수 있다. 이때 이번에 확인한 명령어에 한하여 정리해보려고 한다.

1
$ git rm file

위는 git 이 더 이상 특정 파일을 추적하지 않도록 삭제하는 명령어이다. delete 와 같다고 생각하면 편하다.

1
$ git rm --cached file

위는 git 이 더 이상 특정 파일을 추적하지 않도록 제외하는 명령어이다.

기존 코드에 JS, CSS 반영하기

업스트림 저장소에 의하면 새로 프로젝트를 시작하는게 아닌 기존에 이미 fork 를 한 상태로 고유의 커밋을 진행한 후 업스트림을 통해 태그를 패치할 경우에 대한 방법을 제시하고 있다. 먼저 npm run build 을 통해 생성되는 assets/js/, _sass/ 파일들을 git 이 추적할 수 있게 추가해줘야 한다. 이때 .gitignore 로 인해 추적에 제외된 파일이라 -f 옵션으로 추적이 가능하도록 설정해준다.

1
$ git add assets/js/dist _sass/vendors -f

정리해서 git 을 살펴보면 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* 678acda feat: some commit { }... }
*   b2cd432 fix: merge conflict
|\
| * 3df83fd (tag: v7.2.0, upstream/production, origin/next, next) chore(release): 7.2.0
| *   82ba82e Merge branch 'master' into production
| |\
| | * 5265b03 feat: support vertical scrolling for toc in desktop mode (#2064)
| | * 1164769 build(deps): update dependencies version
| | * 5756b8f build(deps-dev): upgrade dependencies
| | * 35c794c perf: modular sass architecture (#2052)
{ . . . }
| | * e6b87d2 chore: remove `h1` element from site title (#1960)
| | *   7374906 Merge branch 'production'
| | |\
| | |/
| |/|
* | | c67dc67 fix: some commit { . . . }
* | | cd78cd8 fix: some commit { . . . }

위와 같이 현재 downstream 브랜치에 upstream 브랜치를 병합한 형태를 볼 수 있다.

%%{
    init: {
        'theme': 'base',
        'gitGraph': {
            'showCommitLabel': true,
            'mainBranchName': 'upstream'
        }
    }
}%%

gitGraph:
    commit "test"
    commit
    commit tag:"v7.1.1"
    commit
    branch downstream
    checkout downstream
    commit id: "cd78cd8"
    commit id: "c67dc67"
    checkout upstream
    commit type: HIGHLIGHT
    commit
    commit type: HIGHLIGHT
    commit type: HIGHLIGHT
    commit
    commit tag:"v7.2.0" id:"3df83fd"
    checkout downstream
    merge upstream id: "b2cd432"
    commit id:"678acda"

정리하며

여기까지 블로그 코어 태그를 병합하는 내용을 다뤄봤다. 이전에는 너무 밀려있어서 병합 충돌을 해결하는 것이 굉장히 쉽지 않았지만 한번 따라 잡으니까 수정하는 게 훨씬 수월해지는 것을 느낄 수 있다.

This post is licensed under CC BY 4.0 by the author.
If you find any errors, please let me know by comment or email. Thank you.

© Ruffalo. Some rights reserved.

I'm

Using the Chirpy theme for Jekyll.