최근 AI 에이전트를 이용하여 코딩 작업을 하면서

병렬로 동시에 여러 작업을 하는 경우에 유용한 기능으로 git worktree가 각광을 받고 있다.

 

git worktree가 어떤 기능을 제공해주는지

어떤 상황에서 필요로 하는지에 대해서 알아보고자 한다.

 

[ 준비 ]

실습을 해보기 위해서 저장소 하나를 clone 받아서 준비해보자.

 

[ 문제 상황 ]

feature-1 작업을 수행하기 위해 브랜치(branch)를 하나 생성해서 새로운 파일을 하나 만들었다고 해보자.

 

 

그런데, 갑자기 급하게 보안 이슈가 발생하여 hotfix 작업을 해야한다고 해보자.

 

feature-1 작업은 아직 진행 중이기에 commit까지 할 상황은 아니지만

지금까지 작업한 내용은 계속 보관을 하고 싶다고 하면 어떻게 해야할까?

 

[ 솔루션 #1 - new branch ]

그냥 다른 브랜치(branch)로 이동하면 되는 것 아닐까?

 

 

잠시 main 브랜치로 이동을 해보면 알겠지만,

feature-1 브랜치에서 작업하던 내용이 그대로 딸려온다.

 

여기에서 hot-fix-1 브랜치를 새로만들어도 마찬가지이다.

즉, 전에 작업하던 것을 잠시 치워놓고 다른 일을 할 수 있는 상황은 아니라는 것이다.

 

[ 솔루션 #2 - stash ]

이럴 때 가장 먼저 생각나는 방법은 `git stash` 명령어일 것이다(git 공부를 했다면 '이어야 한다'! ^^).

임시 보관이라는 말이 딱 어울리는 명령어이다.

 

 

변경 사항들을 모두 stash 명령어를 통해 따로 저장해놓으면,

현재 working directory는 깨끗해지게 된다.

 

`-u` 옵션은 추적하지 않는(untracked) 파일도 모두 stash 저장하라는 것이고,

`-m` 옵션은 stash 저장할 때 메모를 하도록 하기 위해 사용하는 것이다(여러 stash 저장 목록 구분을 위해).

 

이제 급한 hot-fix 업무를 처리한 후에

다시 돌아와서 전에 작업하던 내역을 불러와 계속 이어서 작업을 하면 되는 것이다.

 

 

그런데,

이렇게 좋은 stash 기능도 원하는 상황에 따라서는 충분하지 않을 수도 있다.

 

[ `새로운` 문제 상황 ]

`git stash` 기능이 정말 유용하긴 하지만,

만약 한 번에 하나의 작업이 아니라 동시에 여러 작업을 해야 한다고 하면 어떻게 해야할까?

 

앞서 말한 AI 에이전트가 동시에 여러 기능을 개발하도록 하고 싶은 경우,

여러 디렉토리에 각각 git clone 받아서 개발하도록 하면 될까?

그런데, 서로 개발 중인 내용을 주고 받는 것도 해야한다고 하면?

 

`stash`가 아니라 새로운 기능이 필요하다 !!!

 

[ 솔루션 #3 - worktree ]

현재 상태를 먼저 점검해보고, worktree를 사용해보자.

 

 

feature-1 브랜치에서 기존 파일 수정도 하고, 새로운 파일을 생성도 하던 중

긴급히 hot-fix를 진행해야 하는 상황에서 worktree를 사용하면 된다.

 

 

'git worktree add {디렉토리 경로} -b {새 브랜치 이름}` 형태로 사용하면 된다.

 

지정한 디렉토리 경로에 새로운 작업 공간을 마련하게 되기에

현재 디렉터리 하위 보다는 상위 경로로 지정해주는 것을 권장한다.

 

기존 branch를 사용할 때에는 `-b` 옵션을 사용하지 않아도 되지만

새로운 branch를 생성하도록 할 때에 `-b` 옵션을 사용하면 된다.

 

 

그런데, 여러 디렉토리에 각각 clone 받은 것과 어떤 차이가 있을까?

 

아래 예시를 자세히 살펴보자.

 

worktree로 생성된 hot-fix-1 작업 공간에서 새로운 작업을 하고 commit까지 했다.

`git log`를 통해서 당연히 새로운 commit까지 이력이 확인 된다.

 

그런데, 기존 디렉토리로 돌아가서 `git log`를 했는데 새로운 이력이 여기에서도 그대로 나온다.

 

 

그렇다!

worktree로 연결되어 있는 작업 공간끼리는 서로 공유 된다.

`git stash`로 잠시 저장해 놓은 이력들도 서로 공유하면서 이용할 수 있다.

 

삭제는 `git worktree remove {경로}` 명령어를 사용하면 된다.

 

 

AI 에이전트에서 이를 어떻게 활용하면 좋을지에 대해서는

각 AI 에이전트에 대해서 실습하면서 공부해보도록 하겠다.

반응형

저장소를 만든 후에 이름을 바꾸고 싶은 경우에 대해서 알아보자.

 

이번에도 저장소의 Settings 메뉴를 선택하면 된다.

 

 

제일 앞에 이름을 변경할 수 있는 부분이 보인다.

변경 후에 "Rename" 버튼만 누르면 된다.

 

 

끝났다 !!!

너무나 간단하다 !!!

 

GitHub에서 저장소 이름을 변경한다는 것은

저장소의 URL도 같이 변경된다는 것을 의미한다.

 

그러면, 저장소 이름을 변경하기 전에 이미 clone을 받은 사람은 어떻게 할까?

 

URL이 바뀌었기에 push, pull, fetch 등의 작업을 할 때 주소를 못찾게 된다 !

그렇기에 변경된 URL을 알려줘야만 한다.

 

 

바뀐 주소만 넣어주면 끝 !!! 😅

 

반응형

저장소를 생성했으면 삭제하는 방법도 알아보자.

 

삭제하고자 하는 저장소의 메뉴 중에서 Settings를 선택해보자.

 

 

제일 밑에 위치하고 있는 Delete this repository 부분을 찾으면 된다.

 

 

저장소를 삭제하면 복구가 안되기 때문에 뭔가 단계(절차)가 많다.

 

정말 삭제할 것이냐고 묻는다.

 

 

삭제하게 되면 어떤 일이 벌어지는 것인지 정말 이해하고 있냐고 묻는다.

 

 

그래도, 한 번 더 확인을 위해 번거롭지만 직접 저장소 이름을 타이핑하도록 하고 있다.

 

 

개인마다 상황이 다르겠지만, Passkey를 등록해놓은 경우 Passkey를 또 확인하고 있다.

 

 

이렇게 힘든 과정을 거쳐야지만 비로소 repository가 삭제 된다.

 

 

힘들다 !!! 😅

반응형

GitHub에서 저장소(repository)를 생성해보자.

 

Organization에서 repository를 생성하는 것과

 

 

개인 계정에서 repository를 생성하는 경우가 있지만,

 

 

repository를 생성하는 것은

 

 

생성되는 위치만 달라지는 것이지 모두 똑같은 repository를 생성하는 것이다.

 

 

하지만, 이렇게 생성되는 repository의 상태는 텅텅비어 있는 경우와 initial commit이 있는 경우로 구분될 수 있다.

 

아래와 같이 README 파일이나 .gitignore 파일을 모두 선택하지 않는 경우에는

 

 

initial commit 조차 없는 텅텅 비어 있는 repository로 만들어진다.

 

 

이후 어떻게 진행하면 된다고 친절하게 가이드 해주고 있다.

그대로 따라해보자.

 

 

브랜치(branch)와 관련된 부분은 가이드의 내용과 다르게 진행했는데,

기본 브랜치로 "main"으로 하라고 환경 설정을 하고 진행하는 방식으로 해봤다.

 

README 파일을 생성하도록 하거나 .gitignore 파일을 포함하도록 하는 경우를 살펴보자.

아래의 예시와 같이 둘 모두를 선택해도 동일하다.

 

 

이렇게 생성하면 README 파일, .gitignore 파일을 등록하는 initial commit이 실행되어

아래와 같이 생성되지 마자 저장소의 내용을 확인할 수 있다.

 

 

저장소 URL을 확인하고

 

 

저 주소로 git clone 받으면 된다.

 

 

정말 간단하지 않은가!? 😅

반응형

온라인 교육을 받다보면 누구나 그렇게 하는 것처럼 웹 서핑을 정말 열심히 하게 된다.

그러다가 우연히 참으로 교육적인 컨텐츠 사이트를 발견하게 되었다.

- First Contributions:  https://github.com/firstcontributions

 

 

첫번째 기여를 해보도록 알려주기 위한 정말 친절한 저장소가 있다니 !!!

- https://github.com/firstcontributions/first-contributions 

 

 

내가 본 것 중에서 가장 많은 언어로 제공해주는 가이드이지 싶다.

물론 한국어도 제공해준다 !!! 태극기를 클릭하자 !!!

- https://github.com/firstcontributions/first-contributions/blob/main/docs/translations/README.ko.md 

 

 

너무나 친절한 가이드이기에 그대로 따라해도 좋지만,

그래도 직접 따라해보면서 조금 더 자세히 안내하는 포스팅을 해보도록 하겠다.

 

① git

이후 작업을 하려면 무엇보다 먼저 git 도구가 설치되어 있어야 한다.

https://git-scm.com/ 

 

 

git 설치 여부 확인 해보고, 필요하면 공식 홈페이지 가이드에 따라 설치 진행하면 된다.

최신 버전 사용하는 것을 권장하지만, 배포판의 경우 살짝 낮은 버전일 수도 있다.

 

 

② Fork

기여하기 위해서는 소스 코드 변경사항을 잠시 담아놓을 나만의 공간(저장소)가 필요하다.

오픈소스 프로젝트를 나만의 저장소로 복사해 놓는 작업을 포크(fork)라고 한다.

아래 이미지 참고하여 fork 버튼을 클릭하자.

- https://github.com/firstcontributions/first-contributions 

 

 

굳이 뭐 다르게 할 필요가 없으면 그냥 기본값 그대로 forked repository를 생성하면 된다.

 

 

개인계정 밑으로 forked repository가 생긴 것을 볼 수 있다.

내 마음대로 손대도 되는 나만의 공간이다.

 

 

③ clone

forked repository를 이제 내 작업환경(local)에 내려받아보자.

 

 

나는 Ubuntu 환경에서 작업을 진행했지만, 명령어 자체는 Windows, Linux, macOS 모두 동일하다.

 

 

④ branch

현재 branch 상황을 확인하고, 파일 수정을 하기 위한 작업용 branch를 생성하자.

 

branch 정보를 보려고 하면 화면 전환이 되는 것이 불편해서 환경 설정 값을 셋팅했다.

> git config --global pager.branch false

 

 

최근 git에서는 branch 전환하는 경우, switch 명령어 사용을 권장한다.

"-c" 옵션을 통해 신규 branch를 생성하고 이동까지 했다.

 

⑤ config

변경사항 저장을 위한 commit을 하려면 사용자 정보가 셋팅되어 있어야 한다.

 

 

branch 정보뿐만 아니라 config 정보라던지 다른 대부분의 출력 방식을 변경해보자.

1페이지가 넘어가는 경우에만 화면 전환을 하고, 그게 아니면 그냥 같은 화면으로 출력하도록 하는 옵션이다.

> git config --global core.pager "less -F -X"

 

user.name 정보와 user.email 정보가 셋팅되어 있지 않으면 아래와 같이 입력해주도록 하자.

> git config --global user.name=this-is-your-name
> git config --global user.email=this-is-your-email

 

⑥ edit

파일 목록을 먼저 확인 해보고, 파일 하나를 수정 작업 해보자.

 

 

contributor 명단에 내 정보를 입력하면 된다.

 

 

 ⑦ commit

변경한 내역을 staging 하고 commit 하면 되는데 ...

 

 

위와 같이 가이드대로 진행을 하면, 나중에 merge가 자동으로 안되는 이슈가 있었다.

 

 

가이드 내용과 달리 "> git add -p"를 통해 staging을 권장하는 내용이 나온다.

 

필수 요소는 아닌 것 같고, 사실 둘의 차이가 왜 발생하는지 이해가 되지는 않지만

이렇게 진행했더니 바로 merge가 된 것으로 보면 이렇게 진행하는 것을 권장한다.

 

 

⑧ push

이제 저장소에 밀어 넣으면 된다.

 

 

⑨ pull-request

이제 github 사이트를 통해서 진행하면 된다.

나의 forked repository를 보면 push 내역을 자동으로 인지해서 pull-request 버튼이 나타난다.

 

 

Description 내용을 보면 간단한 설문 내용도 있으니

찬찬히 읽어보고 제안할 내용 등이 있거나 하면 그에 맞춰서 체크하고 진행해보자.

 

 

⑩ merge

제대로 진행했으면 자동으로 체크 후 merge까지 진행이 된다.

 

 

"Pull requests" 내역의 Closed 항목에서 확인해볼 수 있다.

 

 

Actions 항목에서 내 PR을 위해 수행한 내역을 확인해볼 수 있다.

 

 

⑪ Retry

혹시 merge가 안되고 open 상태로 있다면,

잠시 기다려 보고 그래도 open 상태라고 하면 close 처리 후 다시 진행해보는 것을 추천한다.

 

Actions 내역을 보면 Fail이 아님에도 불구하고,

밑의 그림에서 볼 수 있듯이 Merge PR 부분이 실행되지 않았음을 알 수 있다.

 

 

그러면 Close 하고 다시 PR을 올려보는 것을 추천한다.

 

 

 

이제 여러분은 오픈소스 기여자가 되었습니다 !!!

 

반응형

내 블로그를 오랫동안 보셨던 분들이라면

내가 git을 상당히 오랫동안 다뤄왔다는 것을 아실 수 있을 것이다.

 

git 자체에 대한 것은 물론이고

호스팅을 위한 gitolite 부터 시작해서, Gerrit 이라던지 지금은 GitHub 까지 ...

 

그런데, 요즘은 워낙에 GitHub가 시장을 평정해버려서

git 관련한 대부분의 것들의 표준이 GitHub에서 어떻게 하는지...가 되어버렸다.

 

그리고 많은 분들이 GUI 기반의 git 도우미들을 사용하곤 한다.

 

하지만, git 초심자를 좀 벗어나게 되면

많은 분들이 CLI 방식으로 git을 사용하게 된다. (사실 이게 더 편한 것 같다!)

 

CLI 방식으로 git을 사용할 때 가장 아쉬운 것이 코드를 살펴볼 때인데...

이걸 해결해주는(?!) 재미있는 도구가 있어서 한 번 설치해봤다.

 

 

1. Delta

의외로 문서화가 잘되어 있어서 깜짝 놀랐다.

- https://dandavison.github.io/delta/

 

 

 

감사하게도 MIT 라이선스이다.

Star 갯수도 ... 우와 !!!

- https://github.com/dandavison/delta

 

 

 

 

2. Installation

지원해주는 설치 플랫폼을 보고선 또 한 번 깜짝 !!!!!

- https://dandavison.github.io/delta/installation.html

 

 

 

Debian 계열은 release 페이지에 가서 다운로드 받으라네...

- https://github.com/dandavison/delta/releases

 

 

 

잉?! 버전은 아직도 v0.18.2 ... 내 생에 v1.0을 보지는 못할 것 같네 ^^ ㅋㅋ

다운로드 받아서 설치하자.

> wget https://github.com/dandavison/delta/releases/download/0.18.2/git-delta_0.18.2_amd64.deb

> sudo dpkg --install ./git-delta_0.18.2_amd64.deb

 

금방 설치된다.

 

 

3. Environment

'.gitconfig' 파일에 설정을 해줘야 한다.

 

 > nano ~/.gitconfig

 

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true  # use n and N to move between diff sections
    dark = true      # or light = true, or omit for auto-detection
    line-numbers = true
    side-by-side = true
    
[merge]
    conflictstyle = zdiff3

 

 

 

4. Just Do It

간단히 살펴보기 위해서 commit 확인 후 'git show'를 해봤다.

 

❯ git log --oneline --graph

❯ git show 2a9249a

 

 

line number 뿐만 아니라 전체적으로 GUI 못지 않은 깔끔함 !!!

 

심지어 Syntax highlighting도 잘 해준다.

 

 

우왕~

내 기본 환경에 포함시켜놔야 할 유틸리티이다 !!!

 

자세한 사용법은 공식 사이트를 참고하세요~

 

반응형

GitHub에서 여러 LLM 모델들을 가지고 놀 수 있는 서비스를 제공하고자 하고 있어서

이것을 소개해보려 한다.

 

아직은 정식 서비스를 하고 있지 않아서인지, 메뉴가 꼭 꼭 숨어있다.

 

아! 아직은 Preview 상태라서 해당 메뉴가 보이지 않는 분들이 계실 수도 있다.

그런 분들은 그냥 이런게 곧 나오겠구나~하고 구경 먼저 해보시길 ^^

 

일단 로그인을 하고...

GitHub

 

왼쪽 위 메뉴 버튼을 눌러 펼친 다음에

"Marketplace"를 선택하자.

Menu

 

Marketplace 메뉴들을 보면 "Models"를 발견할 수 있다.

Models

 

여러 LLM 모델들을 볼 수 있는데,

일단 친근한 GPT-4o를 선택해보자.

OpenAI GPT-4o

 

오른쪽 위의 "Playground" 버튼을 선택해보자.

Playground

 

System prompt를 비롯해서 Max Tokens라던지, Temperature 등 여러 parameter들을 설정할 수도 있다.

직접 프롬프트를 입력하면 대기시간 없이 즉시 응답을 해준다.

prompt

 

한글 출력이 깨지는 것이 있는데, model의 잘못인지 GitHub에서의 출력 문제인지는 불분명하다.

 

말만 들어봤던 Mistral 모델을 가지고도 한 번 해봤다.

한글도 잘 알아듣고, 결과도 나름 괜찮네!?

Mistral

 

현재 GitHub Models에서 사용해볼 수 있는 model들은 다음과 같다.

 

이걸 가지고 뭔가 재미난 것들을 해볼 수도 있을 것 같은데...

Preview 기간이 끝나면 당연하게도 유료 서비스가 될 것 같아서 ^^

반응형

최근에 "git sparse-checkout" 명령어를 살펴보면서 git version을 좀 따져보았었다.

  - https://www.whatwant.com/entry/sparse-checkout-size

 

"떡 본 김에 제사지낸다"고,

이번 기회에 Git 최신 버전을 사용하기 위한 방법을 살펴보도록 하겠다.

 

 

[ Environment ]

릴리즈된지 좀 오래되긴 했지만,

실무에서 주력으로 사용되는 Ubuntu 20.04 버전을 기준으로 하겠다.

(설마 우리 회사에서만? ^^)

 

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal


❯ uname -a
Linux chani22-VBox 5.15.0-76-generic #83~20.04.1-Ubuntu SMP Wed Jun 21 20:23:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

 

 

[ Default ]

Ubuntu 20.04 설치 후에 "git" 설치는 손쉽게 가능하다.

버전까지 바로 확인해보자.

 

❯ sudo apt install git


❯ git --version
git version 2.25.1

 

 

[ Check ]

그러면, 지금 현재 git 최신 버전은 어떻게 될까?

공식 홈페이지에서 확인되는 최신 버전은 "v2.41.0"이다.

 

https://git-scm.com/

 

최신 버전을 사용하는 것이 중요할까!?

"Release Notes"를 한 번 살펴봐보자.

 

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.41.0.txt

 

밑으로 스크롤을 내려보면 지난 버전의 Release Note도 확인 가능한데,

뭔가 새로운 명령어나 기존 명령어의 변경 및 개선 사항들이 많이 보인다.

 

즉, 새로운 버전이 필요한 상황이 발생할 수 있는 여지가 많다!

 

 

[ Install ① Using Apt ]

Git PPA를 추가해서 apt를 이용해 Git 최신 버전을 설치해보자.

 

❯ sudo add-apt-repository ppa:git-core/ppa
 The most current stable version of Git for Ubuntu.

For release candidates, go to https://launchpad.net/~git-core/+archive/candidate .
 더 많은 정보: https://launchpad.net/~git-core/+archive/ubuntu/ppa 
[ENTER]을 눌러 진행하거나 Ctrl-c를 눌러 추가하는것을 취소합니다.

기존:1 http://packages.microsoft.com/repos/code stable InRelease
기존:2 https://dl.google.com/linux/chrome/debstable InRelease
...


❯ sudo apt upgrade
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
업그레이드를 계산하는 중입니다... 완료
다음 패키지를 업그레이드할 것입니다:
  git git-man
2개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
9,438 k바이트 아카이브를 받아야 합니다.
이 작업 후 10.1 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] 
받기:1 http://ppa.launchpad.net/git-core/ppa/ubuntu focal/main amd64 git amd64 1:2.41.0-0ppa1~ubuntu20.04.1 [7,325 kB]
받기:2 http://ppa.launchpad.net/git-core/ppa/ubuntu focal/main amd64 git-man all 1:2.41.0-0ppa1~ubuntu20.04.1 [2,113 kB]                                       
내려받기 9,438 k바이트, 소요시간 31초 (302 k바이트/초)                                                                                                         
(데이터베이스 읽는중 ...현재 186326개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../git_1%3a2.41.0-0ppa1~ubuntu20.04.1_amd64.deb ...
Unpacking git (1:2.41.0-0ppa1~ubuntu20.04.1) over (1:2.25.1-1ubuntu3.11) ...
Preparing to unpack .../git-man_1%3a2.41.0-0ppa1~ubuntu20.04.1_all.deb ...
Unpacking git-man (1:2.41.0-0ppa1~ubuntu20.04.1) over (1:2.25.1-1ubuntu3.11) ...
git-man (1:2.41.0-0ppa1~ubuntu20.04.1) 설정하는 중입니다 ...
git (1:2.41.0-0ppa1~ubuntu20.04.1) 설정하는 중입니다 ...
Processing triggers for man-db (2.9.1-1) ...


❯ git --version
git version 2.41.0

 

이걸로 끝이다.

 

이렇게 하면 너무 쉽기에 추천할만한 방법이지만...

간혹 내부망 등의 이슈로 PPA 추가가 어려운 경우가 있으니 다른 방법도 알아보자.

 

 

[ Install ② Source Build ]

좀 번거로울 수도 있지만, 소스코드를 내려 받아서 직접 빌드를 해보자.

 

일단 apt로 설치한 git 패키지를 삭제하자.

 

❯ sudo apt purge git
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  git-man liberror-perl
'sudo apt autoremove'를 이용하여 제거하십시오.
다음 패키지를 지울 것입니다:
  git*
0개 업그레이드, 0개 새로 설치, 1개 제거 및 0개 업그레이드 안 함.
이 작업 후 46.6 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] 
(데이터베이스 읽는중 ...현재 186489개의 파일과 디렉터리가 설치되어 있습니다.)
git (1:2.41.0-0ppa1~ubuntu20.04.1)를 제거합니다...
(데이터베이스 읽는중 ...현재 185600개의 파일과 디렉터리가 설치되어 있습니다.)
Purging configuration files for git (1:2.41.0-0ppa1~ubuntu20.04.1) ...

 

빌드에 필요한 것들을 미리 설치해두자.

 

❯ sudo apt install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev make gettext libz-dev libssl-dev libghc-zlib-dev asciidoc docbook2x
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
주의, 'libz-dev' 대신에 'zlib1g-dev' 패키지를 선택합니다
패키지 make는 이미 최신 버전입니다 (4.2.1-1.2).
패키지 libexpat1-dev는 이미 최신 버전입니다 (2.2.9-1ubuntu0.6).
libexpat1-dev 패키지는 수동설치로 지정합니다.
패키지 libssl-dev는 이미 최신 버전입니다 (1.1.1f-1ubuntu2.19).
패키지 zlib1g-dev는 이미 최신 버전입니다 (1:1.2.11.dfsg-2ubuntu1.5).
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  git-man liberror-perl
'sudo apt autoremove'를 이용하여 제거하십시오.
다음의 추가 패키지가 설치될 것입니다 :
  autoconf automake autopoint autotools-dev debhelper dh-strip-nondeterminism dwz ghc intltool-debian libarchive-cpio-perl libarchive-zip-perl libbsd-dev
  libcroco3 libdebhelper-perl libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libsigsegv2 libsub-override-perl libsys-hostname-long-perl
  libtool m4 po-debconf
제안하는 패키지:
  autoconf-archive gnu-standards autoconf-doc dh-make gettext-doc libasprintf-dev libgettextpo-dev ghc-prof ghc-doc haskell-doc llvm-6.0 libcurl4-doc
  libidn11-dev libkrb5-dev libldap2-dev librtmp-dev libssh2-1-dev libghc-zlib-doc libghc-zlib-prof libtool-doc gfortran | fortran95-compiler gcj-jdk m4-doc
  libmail-box-perl
다음 새 패키지를 설치할 것입니다:
  autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism dwz gettext ghc intltool-debian libarchive-cpio-perl
  libarchive-zip-perl libbsd-dev libcroco3 libcurl4-gnutls-dev libdebhelper-perl libfile-stripnondeterminism-perl libghc-zlib-dev libltdl-dev
  libmail-sendmail-perl libsigsegv2 libsub-override-perl libsys-hostname-long-perl libtool m4 po-debconf
0개 업그레이드, 27개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
74.8 M바이트 아카이브를 받아야 합니다.
이 작업 후 799 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]

 

소스코드를 내려받을 곳을 확인해보자.

 

https://github.com/git/git

 

오른쪽 하단의 tags를 클릭해보자.

 

https://github.com/git/git/tags

 

소스코드 내려받고, 압축을 해제하자.

 

❯ wget https://github.com/git/git/archive/refs/tags/v2.41.0.tar.gz
--2023-07-12 00:42:52--  https://github.com/git/git/archive/refs/tags/v2.41.0.tar.gz
github.com (github.com) 해석 중... 20.200.245.247
다음으로 연결 중: github.com (github.com)|20.200.245.247|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 302 Found
위치: https://codeload.github.com/git/git/tar.gz/refs/tags/v2.41.0 [따라감]
--2023-07-12 00:42:53--  https://codeload.github.com/git/git/tar.gz/refs/tags/v2.41.0
codeload.github.com (codeload.github.com) 해석 중... 20.200.245.246
다음으로 연결 중: codeload.github.com (codeload.github.com)|20.200.245.246|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 지정하지 않음 [application/x-gzip]
저장 위치: `v2.41.0.tar.gz'

v2.41.0.tar.gz                              [          <=>                                                                   ]  10.30M  5.51MB/s    / 1.9s     

2023-07-12 00:42:55 (5.51 MB/s) - `v2.41.0.tar.gz' 저장함 [10804275]


❯ tar zxvf v2.41.0.tar.gz

 

이제 빌드 진행하면 된다. 어렵지 않다.

 

❯ cd git-2.41.0


❯ make prefix=/usr/local all doc info
GIT_VERSION = 2.41.0
    * new build flags
    CC oss-fuzz/fuzz-commit-graph.o
    CC oss-fuzz/fuzz-pack-headers.o
    CC oss-fuzz/fuzz-pack-idx.o
    CC daemon.o
    * new link flags
    CC common-main.o
    CC abspath.o
    CC add-interactive.o
...


❯ sudo make prefix=/usr/local install install-doc install-html install-info

 

기본 환경 설정은 필수 !!

 

❯ git config --global user.name "whatwant"

❯ git config --global user.email "whatwant@whatwant.com"

 

자동완성 기능을 사용하고 싶다면 추가 설정을 진행하자.

 

bash를 사용하는 경우에는 다음과 같이 하면 된다.

 

 sudo cp ./contrib/completion/git-completion.bash /etc/bash_completion.d/

 

zsh을 사용하는 경우에는 다음과 같이 하자.

 

mkdir ~/.zsh


❯ cp ./contrib/completion/git-completion.bash ~/.zsh/



 cp ./contrib/completion/git-completion.zsh ~/.zsh/_git


nano ~/.zshrc

 

뒷 부분에 다음 라인을 추가하면 된다.

 

fpath=(~/.zsh $fpath)
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash

 

shell 관련된 사항은 shell에 재진입해야 적용된다.

그게 싫다면 source 하던지...^^

 

 

빌드해서 설치까지 진행하는 과정이 어렵게 느껴질 수도 있지만

직접 버전 선택하고, 환경도 직접 꾸미는 것이 확실한 방법이긴 하다. 화이팅 !!

반응형

+ Recent posts