티스토리 뷰

1. 개요

 

이번 글에서는 Azure DevOps의 Azure Repos를 활용하여 Git에 대한 기본 명령을 수행해 보고 최종적으로 Pull Request를 수행하는 내용을 다루고자 한다. 이를 통해 Git 리포지토리를 사용하여 코드를 관리하고, 다른 팀원과 협업하며, 프로젝트를 효율적으로 개발할 수 있는 방법에 대해 살펴본다.

혹시 Git에 대하여 생소하거나 개념에 대한 이해가 필요하다면 Git 이란을 참조하여 먼저 Git에 대한 기본 개념을 살펴 볼 것을 권장한다.

 

 

 

 

2. 전제 조건

 

본 핸즈온을 따라 수행하려면 먼저 다음이 준비 되어야 한다.

 

 

 

3. 소스 가져오기 : git clone

 

먼저 생성한 Azure SA 업무환경 VM으로 원격 데스트탑 연결을 통해 접속한다.

웹 브라우저를 열고 위에서 생성한 Azure DevOps의 조직/프로젝트로 이동한다.

생성한 프로젝트의 Repos로 이동하고 Clone to your computer에서 Generate Git Credentials를 선택한다.

패스워드를 메모장에 복사하여 보관해두고 Git URL을 복사한다.

 

컴퓨터에서 터미널을 열어 다음 명령과 복사한 URL을 활용하여 복제를 시작하고 해당 디렉토리로 이동한다.

현재는 아무런 파일도 없는 빈 디렉토리임을 확인할 수 있다.

 

git clone을 통해 기존에 존재하거나 이미 완성된 소스를 복제할 수도 있다. 그러나 본 핸즈온에서는 새로이 소스를 구성해 나가는 내용으로 진행하도록 의도했다.

 

git clone <소스 URL> <디렉토리명>
cd <디렉토리명>
ls -rlth

 

ADO-git-handson# git clone https://zerobig-devops4demo@dev.azure.com/zerobig-devops4demo/20240809_AzureDevOps_Git_Demo/_git/20240815_AzureDevOps_Git_Demo 20240815_git_handson
Cloning into '20240815_git_handson'...
Password for 'https://zerobig-devops4demo@dev.azure.com':
warning: You appear to have cloned an empty repository.
ADO-git-handson#
ADO-git-handson# cd 20240815_git_handson/
ADO-git-handson# ls -rlht
total 0
ADO-git-handson#]

 

 

 

 

4. git 명령 맛보기 : add/commit/push 실행하기

 

참로고 진행에 앞서 전반적인 실습에 대한 이해를 돕기 위해 다음 이미지를 살펴보자.

우리는 Remote Repo에서 빈 리포지토리를 Working Directory로 복제하고 여기에 파일을 하나 생성하여 git add 명령을 수행하여 Staging Area로 이 파일을 이동시키고 다시 git commit 명령을 수행하여 Local Repo로 다시 git push 명령을 수행하여 Remote Repo로 파일을 올리는 실습을 수행하고자 하는 것이다.

이미지 출처 : https://www3.ntu.edu.sg/home/ehchua/programming/howto/Git_HowTo.html

 

 

이제 새로운 파일을 하나 생성하고 이를 Remote 리포지토리로 올려보도록 하겠다.

먼저 README.md라는 파일을 하나 생성하여 임의의 메시지를 입력한다. 참고로 필자의 경우에는Hello~ GIT~:) 라고 입력했다. 그리고 나서 git status 명령을 수행한다.

vi README.md
git status

 

ADO-git-handson# vi README.md
ADO-git-handson# cat README.md
Hello~ GIT~:)
ADO-git-handson#
ADO-git-handson# git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md
nothing added to commit but untracked files present (use "git add" to track)
ADO-git-handson#

 

상태에 대한 결과에 대해 아직 커밋이 이루어 지지 않았으며, 추적되지 않은(Untractked) 파일이 있고 이를 추적하려면 "git add" 사용하라는 내용의 메시지가 전시된다.

이제 다시 다음과 같이 git add 명령을 수행하고 다시 상태를 확인해 본다.

git add .
git status
ADO-git-handson# git add .
ADO-git-handson# git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md
ADO-git-handson#

 

아직 커밋이 이루어 지지 않았고, 커밋할 변경 사항이 감지되었음을 확인할 수 있으며, 현재 Staging 영역에 위치하고 있으며) 이를 Unstage 하려면 "git rm --cached <file>..." 명령을 사용할 수 있다는 메시지가 전시된다.

다시 다음 명령을 수행하여 Local Repo로 이동시킨다.

최초 git commit 명령을 수행하는 경우 이메일과 이름을 구성하라는 메시지가 전시된다. 해당 가이드에 따라 구성하고 다시 명령을 수행하면 된다.

 

git commit -m "Add a README.md"
ADO-git-handson# git commit -m "Add a README.md"
*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <zerobig@DESKTOP-0NHEBH8.localdomain>) not allowed
ADO-git-handson#
ADO-git-handson# git config --global user.email "zerobig.kim@gmail.com"
ADO-git-handson# git config --global user.name "zerobig"
ADO-git-handson#
ADO-git-handson# git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md
ADO-git-handson# git commit -m "Add a README.md"
[master (root-commit) c986055] Add a README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
ADO-git-handson#
ADO-git-handson# git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
nothing to commit, working tree clean
ADO-git-handson#

 

명령 수행 결과, Staging 영역에 저장된 변경 내용을 Local Repo에 영구적으로 기록되었으며, 이로써 프로젝트의 특정 시점을 안전하게 저장하고, 필요할 때 언제든지 해당 시점으로 돌아갈 수 있게 되었다.

 

각 커밋에는 고유한 ID, 변경 내역, 작성자 정보, 그리고 변경 사항에 대한 설명(메시지)이 포함된다.

git log 명령을 통해 보다 상세한 변경 사항에 대한 정보를 얻을 수 있다.

 

추가로 “git log --oneline --graph” 라는 명령을 통해 1라인으로 간략하게 그래프 형태로 결과를 전시할 수도 있다.

HEAD 포인터
전시된 결과에서 HEAD -> master 라는 부분에 주목하자.
HEAD는 현재 브랜치를 가리키는 포인터이며, 브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다. 지금의 HEAD가 가리키는 커밋은 바로 다음 커밋의 부모가 된다. 단순하게 생각하면 HEAD는 *현재 브랜치 마지막 커밋의 스냅샷*이다.

 

이제 다음 명령을 수행하여 Remote 리포지토리로 변경 사항을 업로드 해보자.

iit push <원격 저장소 명> <브랜치 이름>

 

명령을 성공적으로 수행하고 나면, 3개의 오브젝트에 대한 작업 처리 결과를 전시해준다.

ADO-git-handson# git push origin master
Password for 'https://zerobig-devops4demo@dev.azure.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 233 bytes | 3.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Analyzing objects... (3/3) (5 ms)
remote: Validating commits... (1/1) done (0 ms)
remote: Storing packfile... done (80 ms)
remote: Storing index... done (41 ms)
To https://dev.azure.com/zerobig-devops4demo/20240809_AzureDevOps_Git_Demo/_git/20240815_AzureDevOps_Git_Demo
 * [new branch]      master -> master
ADO-git-handson#

 

git push 수행 시 오브젝트 정보
여기에는 원격 저장소로 업로드된 커밋과 관련된 정보를 담고 있으며 다음과 같은 내용이 포함된다.
    1. Commit ID: 업로드된 커밋의 고유 식별자이다.
    2. 트리 객체 (Tree Object): 커밋에 포함된 파일과 디렉토리 구조를 나타내는 트리 객체의 ID이다.
    3. 부모 커밋 ID: 현재 커밋의 부모 커밋(들)의 ID이다. 새로운 커밋을 생성할 때 이전 커밋을 기반으로 하기 때문에 부 
        모 커밋 정보가 필요하다.
이러한 정보는 Remote 리포지토리에서 변경 사항을 추적하고 동기화하는 데 사용된다. Remote 리포지토리에 push할 때마다 이러한 오브젝트가 생성되며, 다른 개발자들이 해당 커밋을 확인하고 작업을 진행할 수 있게 된다.

 

이제 웹 브라우저로 이동하고 Remote 리포지토리를 새로고침하여 푸시 결과를 확인한다.

Repos > Commits를 선택하여 내용을 살펴본다.

위 터미널에서 git log 명령을 수행하여 확인한 결과와 동일한 내용을 확인할 수 있다.

 

 

Part 2에서 계속

 
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함