[Git] Commit 유지하면서 다른 Repository 합치기
비슷한 성격의 두개의 레포지토리를 합치면서 그동안 해왔던 commit은 남기고 하나의 레포지토리로 만들고 싶어 찾고 시도한 방법을 정리했습니다. 제가 활용할 방법은 하나의 레포지토리를 다른 레포지토리로 복제하고 이를 병합하는 방식으로 commit은 유지하면서 레포지토리를 합쳤습니다.  우선, 하나의 레포지토리를 복제합니다. 여기서 첫 번째 레포지토리를 유지할 레포지토리입니다.git clone cd  다음에는 두 번째 레포지토리를 추가합니다.git remote add second-repo git fetch second-repo 두 번째 레포지토리의 커밋 히스토리를 보존하기 위해서 병합 전에 해당 레포지토리를 별도의 디렉토리에 넣어야 합니다.git checkout -b second-repo-branch se..
2024.12.23
no image
GitHub Action으로 LeetCode 풀이 commit 자동화하기 | LeetCode Sync
코딩 테스트 문제를 제공하는 사이트 중 국내에서는 백준, 프로그래머스 등은 BaekjoonHub를 통해 문제를 푸는 데로 연동이 됩니다. 해외의 대표적인 사이트인 LeetCode도 LeetHub라는 것이 존재하지만 버전이 다르다보니 어떤 것을 쓰는 것이 적절한지 확신이 없어서 GitHub Action을 찾아보게 됐습니다.Marketplace에서 필요한 기능을 제공하는 GitHub Action을 찾을 수 있습니다. 사용하는 방법은 여기서 알려준 방법으로 진행하면 됩니다.1. LeetCode 홈페이지에서 필요 정보 추출로그인이 된 상태에서 홈에서 개발자 도구(F12)로 네트워크 탭에서 웹 페이지가 서버와 주고받는 네트워크 요청을 살펴봅니다. 저같은 경우 왼쪽에서 session에서 확인했고, Request H..
2024.12.22
no image
[Git] Github에서 생성한 레포지토리 로컬에 가져오기 | PAT 인증, Authentication failed 해결
Github에서 생성한 레포지토리(저장 공간)에 로컬에서 만든 코드를 올리기 위해서 레포지토리를 로컬에 가져올 필요가 있었습니다. 하지만, 아래와 같은 오류가 나왔습니다. 본 글은 이 오류를 해결하는 과정을 기록하기 위해 쓰여졌습니다. fatal: Authentication failed for '[repository url]' 먼저 생성한 레포지토리의 url을 가져옵니다. 아래 사진과 같이 화면을 이동(repository 선택 > 상단 Code 탭 선택 > 우측 상단의 초록색 Code 버튼 클릭 > HTTPS 선택)해서 빨간색으로 표시된 링크 옆의 복사 버튼으로 url을 클립복드로 복사합니다.   이렇게 복사한 레포지토리 url을 아래 커맨드를 CLI에 입력합니다.  git clone [repositor..
2024.09.16
[Git] 으로 이진탐색으로 버그 찾기 | git bisect 활용
이진 탐색프로젝트가 진행되면서 버그는 필연적입니다. 다만, 프로젝트를 수행하면서 쌓인 커밋이 수백개라 버그가 생긴 커밋을 찾기가 어려울 수 있는데, 이를 돕기 위해 git에선 이진 탐색을 지원하고 있습니다. 이진 탐색(Binary Search)은 특정 값을 찾기 위한 효율적인 알고리즘으로 탐색의 범위를 반으로 나눠가면서 찾는 방법입니다.   이진탐색의 재밌는 사례 이런 유용한 방법을 사용하기 위해서는 탐색 시작 - 문제 커밋 표시 - (문제가 없는) 마지막 커밋 표시의 세가지 단계로 이뤄집니다. 먼저, 아래와 같은 명령어로 이진 탐색을 시작합니다. $ git bisect start 아래와 같은 코드를 통해 현재 커밋에 문제가 있다고 표시를 실행합니다. $ git bisect bad 그리고 마지막으로 문제..
2024.08.28
[Git] 깃 관련 학습할 수 있는 소스 모음
https://git-scm.com/doc Git - DocumentationDocumentation Reference The official and comprehensive man pages that are included in the Git package itself. Quick reference guides: GitHub Cheat Sheet | Visual Git Cheat Sheet Book Videos Length: 05:59 Length: 04:26 What is Git? Length: 08:15 Length: 05:git-scm.com https://opentutorials.org/course/2708 지옥에서 온 Git (새 수업으로 대체) - 생활코딩이 수업은 GITn 시리즈로 완전히 ..
2021.12.05
no image
[Git] 깃 개념, 단어 정리 (repository, commit, branch, fork, push, pull, fetch, pull request)
버전 : 문서를 생성 및 수정하면서 발생하는 새로운 것. Git은 이런 버전들이 많아졌을 경우 버전 관리를 편하게 만들어주는 시스템(VCS: Version Control System) 깃에서 처리하는 워크플로우를 그림으로 정리하면 아래와 같습니다. 작업트리에서 파일을 수정하고, 버전으로 만들고 싶은 파일을 스테이징합니다. 그리고 스테이지에 있는 파일을 저장소로 커밋하는 것이 순서입니다. 필요한 단어들은 아래서 확인하시기 바랍니다. 작업트리 : 파일, 문서 등을 수정, 저장을 하는 디렉토리(working directory). 스테이지 : 버전으로 만들 파일이 대기하는 곳 (staging area) 저장소(Repository) : 스테이지에서 대기하고 있는 파일들을 저장하는 곳 커밋(commit) : Git..
2021.11.14
[Git] 깃허브로 다른 사람들과 함께 프로젝트 협업하기 (원격 저장소 함께 사용, 원격 브랜치 가져오기)
프로젝트를 여러 컴퓨터에서 사용하기 # 클론 만들기: 기존 프로젝트 모든 내용을 가져와 저장소 만들기 $ git clone [url] # 내용 커밋 $ git commit -am "[message]" # 커밋을 원격 저장소에 올리기 $ git push # 원격 저장소에 올라온 새로운 커밋 가져오기 $ git pull - clone: 원격 저장소를 기존 연결 저장소 외 다른 지역 저장소에 사용하려면 원격저장소 내용을 가져오는 것 원격 저장소 # 원격 저장소의 모든 기록 가져오기 $ git fetch [remote] # 원격 저장소로부터 로컬 저장소와 병합 $ git merge [remote]/[branch] - fetch: 원격 저장소의 정보를 가져오기 (지역저장소와 합치는 것이 아닌 원격저장소의 변화 등..
2021.11.12
no image
[Git] 깃허브 원격저장소 연결 및 백업
저장소 연결하기 # 저장소 주소(origin) 추가 $ git remote add origin [address] # 연결됐는지 확인하기 $ git remote -v 변경점을 동기화하기 # 지역 저장소의 커밋을 맨 처음 원격 저장소로 올리기 # -u 옵션ㅇ느 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하기 위한 것 # 한번만 사용하면 충분 $ git push -u origin master # 모든 로컬 브랜치의 변경점을 Git Hub에 업로드 $ git push [remote] [branch] # origin의 내용을 master 브랜치로 가져오기 $ git pull origin master - pull : 원격 저장소와 지역 저장소의 상태를 같게 만들기 위해 원격 저장소의 소스를 지역..
2021.11.10
[Git] 깃 브랜치(branch) 관리하는 명령어 정리(merge 등등)
브랜치 만들기 # 현재 저장소의 모든 로컬 브랜치를 확인 $ git branch # 새로운 브랜치 생성 $ git branch [branch-name] # 다른 브랜치로 이동 $ git checkout [branch-name] 브랜치 병합(merge) - 각 브랜치 작업이 완료된 후 기존 브랜치와 합치는 과정 # 원격 브랜치를 현재 사용 중인 로컬 브랜치와 병합 $ git merge [remote]/[branch] # 병합이 끝난 브랜치 삭제하기 $ git branch -d [branch] 커밋 확인하기 # 커밋 로그에서 한 줄에 한 커밋씩 표기 $ git log --oneline # 브랜치와 커밋의 관계 확인 $ git log --oneline --branches --graph
2021.11.01
반응형

비슷한 성격의 두개의 레포지토리를 합치면서 그동안 해왔던 commit은 남기고 하나의 레포지토리로 만들고 싶어 찾고 시도한 방법을 정리했습니다. 제가 활용할 방법은 하나의 레포지토리를 다른 레포지토리로 복제하고 이를 병합하는 방식으로 commit은 유지하면서 레포지토리를 합쳤습니다.

 

 

우선, 하나의 레포지토리를 복제합니다. 여기서 첫 번째 레포지토리를 유지할 레포지토리입니다.

git clone <첫 번째 레포지토리 URL>
cd <첫 번째 레포지토리 디렉토리>

 

다음에는 두 번째 레포지토리를 추가합니다.

git remote add second-repo <두 번째 레포지토리 URL>
git fetch second-repo

 

두 번째 레포지토리의 커밋 히스토리를 보존하기 위해서 병합 전에 해당 레포지토리를 별도의 디렉토리에 넣어야 합니다.

git checkout -b second-repo-branch second-repo/<브랜치 이름>
mkdir <통합할 디렉토리 이름> # 예: "repo2"
git mv * <통합할 디렉토리 이름>
git commit -m "Move second repo into subdirectory"

 

그 다음에 첫 번째 레포지토리의 기본 브랜치로 돌아가고, 두 번째 레포지토리를 병합합니다.

git checkout <기본 브랜치 이름> # 일반적으로 "main" 또는 "master"
git merge --allow-unrelated-histories second-repo-branch

 

이렇게 병합하면서 충돌이 발생할 수 있는데, 이는 수동으로 해결했습니다. 수동으로 해결하고 나서 변경사항을 커밋과 푸시를 진행합니다. 그리고 병합하는 과정에서 생성한 불필요한 브랜치와 원격 저장소를 제거합니다.

git branch -d second-repo-branch
git remote remove second-repo

 

반응형
반응형

코딩 테스트 문제를 제공하는 사이트 중 국내에서는 백준, 프로그래머스 등은 BaekjoonHub를 통해 문제를 푸는 데로 연동이 됩니다. 해외의 대표적인 사이트인 LeetCode도 LeetHub라는 것이 존재하지만 버전이 다르다보니 어떤 것을 쓰는 것이 적절한지 확신이 없어서 GitHub Action을 찾아보게 됐습니다.

Marketplace에서 필요한 기능을 제공하는 GitHub Action을 찾을 수 있습니다. 사용하는 방법은 여기서 알려준 방법으로 진행하면 됩니다.

1. LeetCode 홈페이지에서 필요 정보 추출

로그인이 된 상태에서 홈에서 개발자 도구(F12)로 네트워크 탭에서 웹 페이지가 서버와 주고받는 네트워크 요청을 살펴봅니다. 저같은 경우 왼쪽에서 session에서 확인했고, Request Headers에서 쿠키(Cookie :) 항목 안에 csrftoken과 LEETCODE_SESSION 라는 값을 찾아서 저장해둡니다. (;는 제외)

2. Secrets 생성하기

해당 GitHub 저장소의 Settings > Secrets and variables > Actions로 이동합니다. 하단에 살펴보면 New repository secret 버튼이 있는데 이를 클릭해 위에서 저장한 csrftoken과 LEETCODE_SESSION을 각각 저장합니다. (저같은 경우는 LEETCODE_CSRF_TOKEN과 LEETCODE_SESSION으로 저장했습니다)

3. 설정 및 yaml 파일 작성

해당 레포지토리에서 Settings > Actions > General 로 인동한 후 Workflow permissions(하단)에서 Read and write permissions로 설정합니다. 그리고 .github/worflows에 아래와 같은 sync_leetcode.yml 파일을 만듭니다.

name: Sync Leetcode

on:
  workflow_dispatch:
  schedule:
    - cron: '0 8 * * *'  # cron 표현식으로 이렇게 하면 매일 오전 8시에 업데이트. 작은 따옴표 사용!

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Sync
        uses: joshcai/leetcode-sync@v1.7
        with:
          github-token: ${{ github.token }}
          leetcode-csrf-token: ${{ secrets.LEETCODE_CSRF_TOKEN }}
          leetcode-session: ${{ secrets.LEETCODE_SESSION }}
          destination-folder: my-folder  # commit될 폴더명
          verbose: true
          commit-header: "[LeetCode Sync]"

만약 .github/workflows에 파일이 없다면 아래와 같은 명령어를 통해 만들어서 수정해주면 됩니다.

mkdir -p .github/workflows
touch .github/workflows/sync_leetcode.yml

4. Sync

이렇게 작성하면 원하는 시간대마다 자동으로 업데이트를 하게 됩니다. 만약 즉각적인 확인을 원한다면 해당 레포지토리의 Actions 탭에서 클릭을 통해 실행할 수 있습니다.

반응형
반응형

Github에서 생성한 레포지토리(저장 공간)에 로컬에서 만든 코드를 올리기 위해서 레포지토리를 로컬에 가져올 필요가 있었습니다. 하지만, 아래와 같은 오류가 나왔습니다. 본 글은 이 오류를 해결하는 과정을 기록하기 위해 쓰여졌습니다.

 

fatal: Authentication failed for '[repository url]'

 

먼저 생성한 레포지토리의 url을 가져옵니다. 아래 사진과 같이 화면을 이동(repository 선택 > 상단 Code 탭 선택 > 우측 상단의 초록색 Code 버튼 클릭 > HTTPS 선택)해서 빨간색으로 표시된 링크 옆의 복사 버튼으로 url을 클립복드로 복사합니다. 

 

 

이렇게 복사한 레포지토리 url을 아래 커맨드를 CLI에 입력합니다. 

 

git clone [repository url]

 

그러면 GitHub 사용자 이름과 비밀번호를 입력하라는 창이 나옵니다. 여기서 사용자 이름은 Github 프로필을 클릭하면 나오는 이름을 작성해주면 되지만, 여기서 Github 비밀번호를 입력하면 위에서 언급한 오류가 나오게 됩니다. 이를 해결하기 위해서는 Personal Access Token(PAT)을 사용해 Github에 접근할 수 있도록 설정하면 됩니다.

 

PAT를 생성하는 방법은 아래와 같은 절차로 진행하면 됩니다.

 

 

  1. GitHub 계정에 로그인합니다.
  2. 상단 우측 프로필 사진을 클릭한 후, Settings를 선택합니다.
  3. 좌측 메뉴에서 Developer settings를 선택한 후, Personal access tokens으로 이동합니다.
  4. Tokens (classic) 항목을 클릭한 다음, Generate new token 버튼을 클릭합니다.
  5. 토큰에 대한 설명을 작성하고, 사용 범위를 설정합니다.
    • repo 권한은 필수입니다.
  6. Generate token 버튼을 눌러 토큰을 생성합니다.
  7. 생성된 토큰을 복사합니다.

이렇게 완료하면 아래 이미지와 같이 잘 설치된 것을 확인할 수 있습니다. 

 

 

반응형
반응형

이진 탐색

프로젝트가 진행되면서 버그는 필연적입니다. 다만, 프로젝트를 수행하면서 쌓인 커밋이 수백개라 버그가 생긴 커밋을 찾기가 어려울 수 있는데, 이를 돕기 위해 git에선 이진 탐색을 지원하고 있습니다. 이진 탐색(Binary Search)은 특정 값을 찾기 위한 효율적인 알고리즘으로 탐색의 범위를 반으로 나눠가면서 찾는 방법입니다.  

 

이진탐색의 재밌는 사례

 

이런 유용한 방법을 사용하기 위해서는 탐색 시작 - 문제 커밋 표시 - (문제가 없는) 마지막 커밋 표시의 세가지 단계로 이뤄집니다. 먼저, 아래와 같은 명령어로 이진 탐색을 시작합니다.

 

$ git bisect start

 

아래와 같은 코드를 통해 현재 커밋에 문제가 있다고 표시를 실행합니다.

 

$ git bisect bad

 

그리고 마지막으로 문제가 없는 커밋을 알고 있다면 아래와 같이 입력할 수 있습니다.

 

$ git bisect good [commit id]

 

이렇게 입력을 해주면, 문제가 최초의 커밋을 깃에서 확인을 해줍니다. 문제 커밋을 찾고나서 이진 탐색 전의 헤드로 바꿔 놓을 수 있습니다. 

 

$ git bisect reset

 

참고자료

[1] https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Git%EC%9C%BC%EB%A1%9C-%EB%B2%84%EA%B7%B8-%EC%B0%BE%EA%B8%B0

 

Git - Git으로 버그 찾기

버그를 찾을 때 먼저 그 코드가 왜, 언제 추가했는지 알고 싶을 것이다. 이때는 파일 어노테이션을 활용한다. 한 줄 한 줄 마지막으로 커밋한 사람이 누구인지, 언제 마지막으로 커밋했는지 볼

git-scm.com

 

 

 

반응형
반응형

 

https://git-scm.com/doc

 

Git - Documentation

Documentation Reference The official and comprehensive man pages that are included in the Git package itself. Quick reference guides: GitHub Cheat Sheet | Visual Git Cheat Sheet Book Videos Length: 05:59 Length: 04:26 What is Git? Length: 08:15 Length: 05:

git-scm.com

 

https://opentutorials.org/course/2708

 

지옥에서 온 Git (새 수업으로 대체) - 생활코딩

이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.

opentutorials.org

 

 

https://wikidocs.net/book/1382

 

Git 튜토리얼

git 튜토리얼 Pro Git 2판의 1, 2, 3, 5, 6장 내용을 요약 정리 자습한다.

wikidocs.net

 

반응형
반응형

 

 

버전 : 문서를 생성 및 수정하면서 발생하는 새로운 것. Git은 이런 버전들이 많아졌을 경우 버전 관리를 편하게 만들어주는 시스템(VCS: Version Control System)

 

깃에서 처리하는 워크플로우를 그림으로 정리하면 아래와 같습니다. 작업트리에서 파일을 수정하고, 버전으로 만들고 싶은 파일을 스테이징합니다. 그리고 스테이지에 있는 파일을 저장소로 커밋하는 것이 순서입니다. 필요한 단어들은 아래서 확인하시기 바랍니다.

작업트리 : 파일, 문서 등을 수정, 저장을 하는 디렉토리(working directory). 

 

스테이지 : 버전으로 만들 파일이 대기하는 곳 (staging area)

 

저장소(Repository) : 스테이지에서 대기하고 있는 파일들을 저장하는 곳

 

커밋(commit) : Git에서 버전을 만드는 행위

 

브랜치(branch) : 여러 갈래로 나눠 독립적으로 작업을 진행하는 것. 분기라고도 함. 설명을 여기보다 더 쉽게 하기는 어려울 것 같아서, 더 자세한 설명을 원하는 경우 아래 접은 글 확인

 

 

포크 (fork) : 다른 저장소에 있는 소스를 내 저장소에 복제해오는 것

푸쉬 (push) : 지역 저장소의 소스를 원격저장소로 올리는 것

 

페치 (fetch) : 원격 저장소의 데이터를 지역으로 가져오기만 하는 것

 

풀 (pull) : 원격 저장소에서 지역 저장소로 가져와서 병합하는 것

 

풀 리퀘스트 (pull request) : 원본 저장소의 개발자에게 내가 수정한 것을 반영해달라고 요청하는 것

 

오픈 소스 프로젝트에 참여했을 때, 내가 작업을 해서 반영하고 싶다면, 아래와 같은 과정을 지날 것입니다.

 

(1) 내 저장소로 복제해서 가져오고 (fork)

(2) 그것을 원격 저장소에서 내 지역저장소로 가져온 다음 (pull/clone)

(3) 수정한 지역저장소 내용을 내 원격저장소로 보내서 (push)

(4) 오픈 소스 소유자에게 수정 요청 (pull request)

 

 

https://git-scm.com/doc

 

Git - Documentation

Documentation Reference The official and comprehensive man pages that are included in the Git package itself. Quick reference guides: GitHub Cheat Sheet | Visual Git Cheat Sheet Book Videos Length: 05:59 Length: 04:26 What is Git? Length: 08:15 Length: 05:

git-scm.com

 

반응형
반응형
  • 프로젝트를 여러 컴퓨터에서 사용하기
# 클론 만들기: 기존 프로젝트 모든 내용을 가져와 저장소 만들기
$ git clone [url]

# 내용 커밋
$ git commit -am "[message]"

# 커밋을 원격 저장소에 올리기
$ git push

# 원격 저장소에 올라온 새로운 커밋 가져오기
$ git pull

- clone: 원격 저장소를 기존 연결 저장소 외 다른 지역 저장소에 사용하려면 원격저장소 내용을 가져오는 것

 

  • 원격 저장소
# 원격 저장소의 모든 기록 가져오기
$ git fetch [remote]

# 원격 저장소로부터 로컬 저장소와 병합
$ git merge [remote]/[branch]

- fetch: 원격 저장소의 정보를 가져오기 (지역저장소와 합치는 것이 아닌 원격저장소의 변화 등 정보만 가져옴)

 

  • 협업 환경 구성하기
# 원격 저장소의 모든 기록 가져오기
$ git fetch [remote]

# 원격 저장소로부터 로컬 저장소와 병합
$ git merge [remote]/[branch]

- fetch: 원격 저장소의 정보를 가져오기 (지역저장소와 합치는 것이 아닌 원격저장소의 변화 등 정보만 가져옴)

 

반응형
반응형
  • 저장소 연결하기
# 저장소 주소(origin) 추가
$ git remote add origin [address]

# 연결됐는지 확인하기
$ git remote -v

 

Github 내 저장소 주소(origin) 찾기

 

  • 변경점을 동기화하기
# 지역 저장소의 커밋을 맨 처음 원격 저장소로 올리기
# -u 옵션ㅇ느 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하기 위한 것
# 한번만 사용하면 충분
$ git push -u origin master

# 모든 로컬 브랜치의 변경점을 Git Hub에 업로드
$ git push [remote] [branch]

# origin의 내용을 master 브랜치로 가져오기
$ git pull origin master

- pull : 원격 저장소와 지역 저장소의 상태를 같게 만들기 위해 원격 저장소의 소스를 지역 저장소로 가져오는 행위

 

반응형
반응형
  • 브랜치 만들기
# 현재 저장소의 모든 로컬 브랜치를 확인
$ git branch

# 새로운 브랜치 생성
$ git branch [branch-name]

# 다른 브랜치로 이동
$ git checkout [branch-name]

 

  • 브랜치 병합(merge)

- 각 브랜치 작업이 완료된 후 기존 브랜치와 합치는 과정

# 원격 브랜치를 현재 사용 중인 로컬 브랜치와 병합
$ git merge [remote]/[branch]

# 병합이 끝난 브랜치 삭제하기
$ git branch -d [branch]

 

  • 커밋 확인하기
# 커밋 로그에서 한 줄에 한 커밋씩 표기
$ git log --oneline

# 브랜치와 커밋의 관계 확인
$ git log --oneline --branches --graph

 

반응형