Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

1. Git 프로세스 개요

2. Git 아키텍처 개요

3. 소스 가져오기 : git clone

image-20240808-012930.png

image-20240808-013010.png

소스를 clone하고 해당 디렉토리로 이동한다.

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

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

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

파일을 생성하고 커밋 후 리모트로 푸시한다.

vi README.md
git status
git add .
git commit -m "First Commit"
git status
git push

ADO-git-handson# vi README.md
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# git add .
ADO-git-handson# git commit -m "First Commit"
[master (root-commit) 18c1fe6] First Commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
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# git push
Password for 'https://zerobig-devops4demo@dev.azure.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 235 bytes | 13.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Analyzing objects... (3/3) (9 ms)
remote: Validating commits... (1/1) done (0 ms)
remote: Storing packfile... done (68 ms)
remote: Storing index... done (44 ms)
To https://dev.azure.com/zerobig-devops4demo/202408_AzureDevOps_Git_Demo/_git/202408_AzureDevOps_Git_Demo
 * [new branch]      master -> master
ADO-git-handson#

리모트 리포지토리를 새로고침하여 푸시 결과를 확인한다.

image-20240808-013705.png

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

image-20240808-015850.png

로컬에서 git log 명령을 통해 commit에 대한 로그를 확인해본다.

git log
git log --oneline

ADO-git-handson# git log
commit 18c1fe6382799469b6e433d6269021dddd77a760 (HEAD -> master, origin/master)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 10:35:48 2024 +0900

    First Commit
ADO-git-handson#
ADO-git-handson#
ADO-git-handson# git log --oneline
18c1fe6 (HEAD -> master, origin/master) First Commit
ADO-git-handson#

5. 새로운 브랜치 생성하여 작업하기

현재 브랜치를 확인하고 새로운 브랜치를 생성하여 작업을 준비한다.

git branch
git checkout -b feat-1-colors

ADO-git-handson# git branch
* master
ADO-git-handson# git checkout -b feat-1-colors
Switched to a new branch 'feat-1-colors'
ADO-git-handson# git branch
* feat-1-colors
  master
ADO-git-handson# ls -rlht
total 0
-rwxrwxrwx 1 zerobig zerobig 21 Aug  8 10:35 README.md
ADO-git-handson# cat README.md
20240808_git_handson
ADO-git-handson#

VS Code를 띄워서 colors.txt 파일을 생성하고 내용을 입력 후 저장한다.

code .

ADO-git-handson# git branch
* master
image-20240808-020815.png

터미널로 돌아와 git status 명령을 수행하여 상태를 확인한다.

git status

ADO-git-handson# git status
On branch feat-1-colors
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        colors.txt

nothing added to commit but untracked files present (use "git add" to track)
ADO-git-handson#

다시 커밋 후 리모트로 푸시한다.

ADO-git-handson# git add .
ADO-git-handson# git staus
git: 'staus' is not a git command. See 'git --help'.

The most similar command is
        status
ADO-git-handson# git status
On branch feat-1-colors
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   colors.txt

ADO-git-handson# git commit -m "Add colors.txt"
[feat-1-colors b5ecbfd] Add colors.txt
 1 file changed, 3 insertions(+)
 create mode 100644 colors.txt
ADO-git-handson# git status
On branch feat-1-colors
nothing to commit, working tree clean
ADO-git-handson# git push
fatal: The current branch feat-1-colors has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feat-1-colors

ADO-git-handson# git push --set-upstream origin feat-1-colors
Password for 'https://zerobig-devops4demo@dev.azure.com':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 24.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Analyzing objects... (3/3) (6 ms)
remote: Validating commits... (1/1) done (0 ms)
remote: Storing packfile... done (36 ms)
remote: Storing index... done (45 ms)
To https://dev.azure.com/zerobig-devops4demo/202408_AzureDevOps_Git_Demo/_git/202408_AzureDevOps_Git_Demo
 * [new branch]      feat-1-colors -> feat-1-colors
Branch 'feat-1-colors' set up to track remote branch 'feat-1-colors' from 'origin'.
ADO-git-handson#

리모트 리포지토리를 새로고침하여 푸시 결과를 확인한다.

image-20240808-021844.png

새로운 브랜치 feat-1-colors를 선택하고 결과를 확인한다.

master 브랜치에는 존재하지 않는 colors.txt 파일이 존재함을 확인할 수 있다.

image-20240808-040814.png

Repos > Commits를 선택하여 두 브랜치의 내용을 비교하여여 살펴본다.

# master

image-20240808-050757.png

# feat-1-colors

image-20240808-050723.png

feat-1-colors 브랜치에는 colors.txt가 추가되어 있으며 하나의 커밋이 더 생겨 있음을 확인할 수 있다.

이는 로컬의 터미널에서도 git log 명령을 통해 확인할 수 있다.

git log
git checkout master
git log

ADO-git-handson# git log
commit b5ecbfdf8b941800654effe47efdb441bb54862e (HEAD -> feat-1-colors, origin/feat-1-colors)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 11:12:21 2024 +0900

    Add colors.txt

commit 18c1fe6382799469b6e433d6269021dddd77a760 (origin/master, master)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 10:35:48 2024 +0900

    First Commit
ADO-git-handson#
ADO-git-handson# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
ADO-git-handson# git log
commit 18c1fe6382799469b6e433d6269021dddd77a760 (HEAD -> master, origin/master)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 10:35:48 2024 +0900

    First Commit
ADO-git-handson#

HEAD 포인터

HEAD현재 브랜치를 가리키는 포인터이며, 브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다. 지금의 HEAD가 가리키는 커밋은 바로 다음 커밋의 부모가 된다. 단순하게 생각하면 HEAD는 *현재 브랜치 마지막 커밋의 스냅샷*이다.

image-20240808-051227.png

6. Pull Request 수행하기

Azure Repo > Branches로 이동하여 Create a pull request를 선택한다.

image-20240808-051917.png

상세한 요청 내역 작성, Reviewer 추가 후 Create 클릭한다.

image-20240808-052445.png

Complete를 클릭하여 master 브랜치에 병합을 수행한다.

image-20240808-052657.png

Complete merge를 선택한다.

image-20240808-053154.png

정상적으로 병합이 이루어졌음을 확인한다.

image-20240808-054126.png

Repos > Commits를 선택하여 두 브랜치의 내용을 비교하여 살펴본다.

master 브랜치에 Merged 커밋이 추가되어 있으며 커밋 이력이 일치하고 있음을 확인할 수 있다.

# master

image-20240808-060048.png

# feat-1-colors

image-20240808-060112.png

이는 로컬의 터미널에서도 git log 명령을 통해 확인할 수 있다.

git log
git log --oneline --graph
git checkout master
git log
git log --oneline --graph

ADO-git-handson# git log
commit b5ecbfdf8b941800654effe47efdb441bb54862e (HEAD -> feat-1-colors, origin/feat-1-colors)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 11:12:21 2024 +0900

    Add colors.txt

commit 18c1fe6382799469b6e433d6269021dddd77a760
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 10:35:48 2024 +0900

    First Commit
ADO-git-handson# git log --oneline --graph
* b5ecbfd (HEAD -> feat-1-colors, origin/feat-1-colors) Add colors.txt
* 18c1fe6 First Commit
ADO-git-handson#
ADO-git-handson# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
ADO-git-handson# git log
commit 3e5344588a59bec19069ded7c22707e7fdb47bf3 (HEAD -> master, origin/master)
Merge: 18c1fe6 b5ecbfd
Author: 영대 김 <zerobig.kim@gmail.com>
Date:   Thu Aug 8 05:32:32 2024 +0000

    Merged PR 57: Add colors.txt

    Add colors.txt contains the lists of our colors we can provide

commit b5ecbfdf8b941800654effe47efdb441bb54862e (origin/feat-1-colors, feat-1-colors)
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 11:12:21 2024 +0900

    Add colors.txt

commit 18c1fe6382799469b6e433d6269021dddd77a760
Author: Zerobig <zerobig.kim@gmail.com>
Date:   Thu Aug 8 10:35:48 2024 +0900

    First Commit
ADO-git-handson# git log --oneline --graph
*   3e53445 (HEAD -> master, origin/master) Merged PR 57: Add colors.txt
|\
| * b5ecbfd (origin/feat-1-colors, feat-1-colors) Add colors.txt
|/
* 18c1fe6 First Commit
ADO-git-handson# ls -rlht
total 0
-rwxrwxrwx 1 zerobig zerobig 21 Aug  8 10:35 README.md
-rwxrwxrwx 1 zerobig zerobig 14 Aug  8 14:55 colors.txt
ADO-git-handson# cat colors.txt
Red
Green
BlueADO-git-handson#

# master

image-20240808-060646.png

# feat-1-colors

image-20240808-060616.png

참고

현재 시나리오에서는 간단히 하기 위해서 본인이 직접 Pull Request를 요청하고 처리하지만 실제로는 권한 있는 검토자를 지정하고 해당 검토자를 통해 코드 검토 및 확인을 받아야 한다.

Pull Request를 요청하게 되면 Reviewer에게 요청이 전달되며 다음과 같이 Files 탭에서 변경사항을 확인하고 관련 Comment를 남길 수 있다.

7. Brach 전략 수립하기

Git 브랜치 전략 채택

현재 master 브랜치 내의 코드는 쉽게 접근하여 코드 변경을 수행할 수 있는 상태이므로 이에 대한 보완이 필요하다. 소위 “Git 브랜치 전략”업데이트 할 수 있는 보안적으로 취약한 상태이다.

Git은 버전 제어를 사용하여 코드를 공유하고 관리하는 방법을 유연하게 제공하며 팀은 이러한 유연성과 일관된 방식으로 코드를 공동 작업하고 공유해야 하는 필요성 사이의 균형을 찾아야 한다.

팀 구성원은 다른 팀원과 공유되는 Git 브랜치를 통해 코드 변경 사항항을 게시, 공유, 검토 및 반복하는 작업을 수행한다. 이러한 팀을 위한 브랜치 전략을 채택한다. 더 효율적으로 협업하고 버전 제어에 대한 관리 시간을 줄이고 코드를 개발하는 데 더 많은 시간을 할애할 수 있도록 한다.

다음 브랜치 전략은 Microsoft에서 Git을 사용하는 방법을 기반으로 하며 자세한 내용은 Microsoft에서 Git을 사용하는 방법을 참조한다.

image-20240809-000642.png

브랜치 전략을 단순하게 유지한다. 다음 세 가지 개념으로 전략을 빌드한다.

  • 새로운 모든 기능과 버그 수정에 feature 브랜치를 사용한다.

  • Pull Request를 사용하여 feature 브랜치를 master 브랜치에 병합한다.

  • 고품질의 최신 master 브랜치를 유지한다..

이러한 개념을 확장하고 모순을 피하는 전략을 통해 팀은 일관되고 따르기 쉬운 버전 제어 워크플로를 얻을 수 있다.

Git 브랜치 전략 구성

Azure Repo > files로 이동하여 master 브랜치에서 colors.txt를 선택하고 Edit을 선택한다.

image-20240809-001052.png

Pink를 추가하고 Commit을 선택한다.

image-20240809-001433.png

다시 Commit을 선택한다.

image-20240809-001615.png

파일이 수정되고 하나의 Commit이 생성되었다.

이제 master 브랜치를 보호할 수 있도록 구성을 해보겠다.

Azure Repo > Branches로 이동하여 master 브랜치를 선택하고 추가 옵에서 branch policies를 선택하고 Edit을 선택한다.

image-20240809-002932.png

Branch Policies - Require a minimum number of reviewers를 “1”로 설정하고 데모의 편의성으 위해해 Allow requestors to approve their own changes를 체크한다.

image-20240809-004601.png

이제 다시 Azure Repo > files로 이동하여 master 브랜치에서 colors.txt를 선택하고 Edit을 선택한다. 파일 변경 후 Commit을 시도하면 “TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.” 에러가 발생함을 확인할 수 있다. 즉, 이 브랜치에 대한 푸시는 허용되지 않았으며 이 브랜치의 업데이트는 Pull Request를 통해서만 가능함을 알 수 있다.

image-20240809-005436.png

이제 구성된 환경을 토대로 코드 변경 및 Pull Request를 통한 master 브랜치로의 병합을 시도해 보겠다.

Git 브랜치 전략 구성 증

소스 현행화

터미널로 이동하여 다음 명령을 통해 feature 브랜치로의 소스를 현행화 한다.

먼저 현재 브랜치를 확인하고 새로운 브랜치를 생성하여 작업을 준비한다.

git branch
git checkout -b feat-1-colors
git fetch --dry-run
git pull origin master
cat colors.txt
git log --oneline --graph

ADO-git-handson# cd 20240808_git_handson/
ADO-git-handson# git branch
  feat-1-colors
* master
ADO-git-handson# git checkout feat-1-colors
Switched to branch 'feat-1-colors'
Your branch is up to date with 'origin/feat-1-colors'.
ADO-git-handson# git fetch --dry-run
Password for 'https://zerobig-devops4demo@dev.azure.com':
remote: Azure Repos
remote: Found 3 objects to send. (0 ms)
Unpacking objects: 100% (3/3), 295 bytes | 5.00 KiB/s, done.
From https://dev.azure.com/zerobig-devops4demo/202408_AzureDevOps_Git_Demo/_git/202408_AzureDevOps_Git_Demo
   3e53445..28bab0f  master     -> origin/master
ADO-git-handson# git pull origin master
Password for 'https://zerobig-devops4demo@dev.azure.com':
From https://dev.azure.com/zerobig-devops4demo/202408_AzureDevOps_Git_Demo/_git/202408_AzureDevOps_Git_Demo
 * branch            master     -> FETCH_HEAD
Updating b5ecbfd..28bab0f
Fast-forward
 colors.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
ADO-git-handson# cat colors.txt
Red
Green
Blue
Pink
ADO-git-handson# git branch
* feat-1-colors
  master
ADO-git-handson#
ADO-git-handson# git log --oneline --graph
* 28bab0f (HEAD -> feat-1-colors, origin/master) Updated colors.txt
*   3e53445 (master) Merged PR 57: Add colors.txt
|\
| * b5ecbfd (origin/feat-1-colors) Add colors.txt
|/
* 18c1fe6 First Commit
ADO-git-handson# 

소스 수정 및 commit, push

colors.txt 파일을 열어 Yellow를 추가하고 저장한 후 git add, commit 및 push를 수행한다.

vi colors.txt
git add .
git commit -m "Update colors.txt adding color 'Yello'"
git push

ADO-git-handson# vi colors.txt
ADO-git-handson# cat colors.txt
Red
Green
Blue
Pink
Yellow
ADO-git-handson# git add .
ADO-git-handson# git status
On branch feat-1-colors
Your branch is ahead of 'origin/feat-1-colors' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   colors.txt

ADO-git-handson# git commit -m "Update colors.txt adding color 'Yello'"
[feat-1-colors dc46381] Update colors.txt adding color 'Yello'
 1 file changed, 2 insertions(+), 1 deletion(-)
ADO-git-handson# git push
Password for 'https://zerobig-devops4demo@dev.azure.com':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 326 bytes | 21.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Analyzing objects... (3/3) (6 ms)
remote: Validating commits... (1/1) done (0 ms)
remote: Storing packfile... done (29 ms)
remote: Storing index... done (55 ms)
To https://dev.azure.com/zerobig-devops4demo/202408_AzureDevOps_Git_Demo/_git/202408_AzureDevOps_Git_Demo
   b5ecbfd..dc46381  feat-1-colors -> feat-1-colors
ADO-git-handson#

Pull Request 작성

리모트 리포지토리를 새로고침하여 푸시 결과를 확인한다.

image-20240809-015134.png

Create a pull request를 선택 후 Reviewers에 자신을 추가하고 Pull Request를 생성한다.

image-20240809-015715.pngimage-20240809-030049.png

정상적으로 master 브랜치에 병합이 이루어진 결과를 확인할 수 있다.

image-20240809-025802.png

참고로 Reviewers를 지정하지 않으면 사전에 구성한 브랜치 정책으로 인해 Pull Request 작성이 불가함을 확인할 수 있다.

image-20240809-015938.png

Pull Request 검토자는 다음과 같이 코드의 변경사항을 비교할 수도 있고 필요 시, 의견을 남길 수도 있다.

image-20240809-020814.pngimage-20240809-020305.pngimage-20240809-020917.pngimage-20240809-021021.png

Repos > Commits를 선택하여 두 브랜치의 내용을 비교하여 살펴본다.

master 브랜치에 Merged 커밋이 추가되어 있으며 커밋 이력이 일치하고 있음을 확인할 수 있다.

# master

image-20240809-025655.png

# feat-1-colors

image-20240809-025608.png

  • No labels