Git과 GitHub
응용프로그램을 개발하면서 직면하게 되는 어려움 중 하나가 소스코드의 형상 관리다.
코딩을 하다보면 이런 저런 다양한 알고리즘과 로직을 적용하게 되는데 그 때마다 다른이름으로 저장하고 코드를 지우고 새로 작성하고 또 다른이름으로 저장하고를 반복하기도 한다. 게다가 혼자 개발하지 않고 많은 개발자들이 하나의 SW를 개발하거나 프로젝트를 수행하게 되면 그 어려움은 말로 표현하기 어려울지경이 된다.
그래서 등장한 솔루션이 바로 형상(버전)관리시스템이다. CVS, SVN 등 다양한 소스코드의 형상을 관리할 수 있는 솔루션들이 등장했으나 2020년대인 지금, 리눅스의 아버지인 리누스 토발즈가 리눅스 소스코드 관리를 위해 홧김에(?) 2주만에 뚝딱 만들어 공개한 GIT으로 천하통일이 되고 있는 분위기다.
Git은 분산 버전 관리 시스템이며, 개발자들이 코드의 버전을 관리하고 협업을 수행하는 데 사용되는 도구이다. Git은 로컬 컴퓨터에서 작업하며, 코드 변경 사항을 추적하고 병합하는 등의 기능수행한다.
GitHub 또한 Git과 동일한 기능을 수행하나 Git의 로컬저장소를 호스팅하며 Git의 저장소와 Git에 접근하는 사용자 계정을 보다 체계적으로 관리하고 접근권한을 세분화할 수 있는 등 다양한 편의기능을 추가적으로 제공하는 웹 기반 호스팅 플랫폼이다.

Linux 서버의 Git과 GitHub 연동하기
개발자가 Windows 또는 MacOS 가 설치된 개인용 컴퓨터(PC)에서 코딩을 수행하고 테스트를 수행할 수 있는 환경이 갖춰져 있다면 PC에 Git을 별도로 직접 설치하거나 Visual Studio Code와 같은 통합개발환경에서 지원하는 Git 플러그인 등을 통해 손쉽게 연동할 수 있다.
하지만 Ubuntu나 Rocky(구, CentOS) 리눅스에 개발환경을 만들었다면 리눅스 서버에 Git을 설치하고 수동으로 GitHub에 연동해야 한다.
Git 설치
Rocky 리눅스 기준으로 먼저 dnf 또는 yum 명령을 통해 현재 설치된 운영체제를 최신으로 업데이트 해준다. 이 과정은 생략해도 무방하다.
$ sudo dnf update

git 을 설치한다.
$ sudo dnf install git

설치된 git의 버전을 확인한다.
$ git --version

Git 초기화
git을 설치하고 나면 최소한의 초기화 과정을 거쳐야 한다.
먼저 git에 사용자 이름과 이메일 주소를 설정한다.
$ git config --global user.name "taeXXX"
$ git config --global user.email "uniXXXX@XXXXr.com"

전역으로 사용할 이름과 이메일주소를 설정하고 나면 이제 소스코드를 관리할 “로컬 리포지토리(로컬 저장소)”를 생성하게 되는데 이 명령어를 실행하는 디렉토리에 .git 이라는 디렉토리명으로 리포지토리가 생성된다.
$ git init

git init 명령은 해당 컴퓨터 또는 서버에 접속할 수 있는 사용자는 누구나 실행할 수 있다. git init 명령을 실행하면 앞에서 언급했듯 해당 명령을 실행할 당시의 현재 경로 아래에 .git 디렉토리가 생성되고 리포지토리가 만들어진다.
즉 여러 디렉토리에 다수의 리포지토리를 생성할 수 있고 .git 디렉토리에 생성된 리포지토리는 .git이 위치한 경로의 하위 디렉토리의 소스코드를 저장 관리하는 리포지토리라는 것을 알 수 있다.
그리고 git init을 수행해 생성된 리포지토리의 기본 브랜치이름은 master이며 리포지토리를 생성할 때 마다 사용되는 기본 브랜치이름을 변경하고자 한다면 –global init.defaultBranch를 설정하라고 알려준다.
또한 브랜치 이름을 변경하고자 한다면 git branch -m 명령을 실행하면 된다고도 친절하게~ 알려준다.
git init 명령을 실행한 뒤 la -al 명령을 수행하면 다음과 같이 .git 디렉토리가 생성된 것을 알 수 있다.

로컬 Git과 GitHub 연동을 위한 PAT 인증토큰 생성하기
예전에는 Git과 GitHub 연동 시 사용자 인증을 github 웹사이트의 ID와 비밀번호를 사용했다. 하지만 웹사이트의 비밀번호는 관리의 어려움으로 인한 유출사고가 빈번하게 발생했다. 때문에 GitHub에서는 PAT라는 새로운 인증토큰을 사용해야만 Git과 연동할 수 있도록 시스템을 수정했다. (PAT == Personal Access Token)
이 PAT는 Git과 GitHub를 연동하기 전에 미리 생성하여 값을 복사해두어야 한다.
이 PAT는 GitHub 웹사이트의 사용자 프로파일 설정메뉴에서 생성할 수 있다.

“설정” 메뉴에 진입한 다음 메뉴 가장 아래의 “Developers Settings” 메뉴로 이동하면 다음 화면과 같이 새로운 토큰을 생성할 수 있는 버튼이 보인다. 이름하여 “Generate new token”.

Classic 토큰이 있고 Fine-grained tokens 두개가 보이는데 필자는 아직은 베타버전이지만 세부적인 접근권한을 설정할 수 있는 새로운 토큰을 생성했다.
토큰을 생성하면 최초 1회만 토큰을 볼 수 있다. 이후에는 토큰의 문자열을 보여주지 않으며 Re-Generate만 할 수 있는 것으로 보인다. 토큰의 값(value)를 확인할 수 있는 화면이 보이지 않는다.
Git 리포지토리와 GitHub 리포지토리 연동
Git 리포지토리와 GitHub 리포지토리 연동을 위해서는 리포지토리의 최상위 브랜치 이름이 동일해야 한다. 때문에 Git의 리포지토리 이름을 GitHub의 리포지토리 이름과 동일하게 변경해줬다.
GitHub 리포지토리는 다음 화면에서 확인할 수 있다.

그리고 리포지토리의 브랜치 이름은 다음 화면에서 확인할 수 있다. 브랜치의 이름은 main 이다.

GitHub 리포지토리의 최상위 브랜치 이름인 main 으로 Git에서 초기화한 리포지토리의 브랜치 이름을 변경해준다.
$ git branch -m main

그 다음 GIT의 로컬 리포지토리에 현재 디렉토리( .git 이 있는 디렉토리)의 소스코드 파일을 모두 추가한다. 그리고 commit 한다.
$ git add .
$ git commit -m "first commit"

이제 로컬 리포지토리에 GitHub의 원격 리포지토리를 연결한 다음 로컬 리포지토리의 main 브랜치에 commit 한 코드를 push 한다.
$ git remote add origin https://github.com/taeXXX/XXXX-wp.git
$git push -u origin main

git remote 명령으로 Git과 연동하려는 GitHub의 리포지토리 HTTPS URL을 찾아 연결해준다. 그리고 최초 Push 할 때 GitHub에 연결하기 위해 인증과정이 진행된다.
먼저 Username에 GitHub의 ID를 입력해주고 Password에는 GitHub에서 생성한 PAT를(토큰값) 입력해주면 된다. 인증이 완료되면 로컬 리포지토리에 Commit 한 코드들이 GitHub에 Push 된다.
만약 그냥 GitHub 웹사이트의 ID를 입력하면 다음과 같이 에러가 발생한다.

그리고 GitHub에서 해당 리포지토리를 찾아가보면 Push된 소스코드가 보일 것이다.
#git과github연동 #github의PAT #github인증