Git Repository에  Upload하면 안되는 파일/폴더를 Upload한 상황 (ex. 보안키, Build output 등...)

나는 Build Output을 업로드 하는 바람에 object파일들과 그외 의존성파일들이 함께 업로드 되었다😢

gitignore파일을 같이올리면 원본 코드도 안올라갈까봐 제외하고 올린후에 나중에 한번에 올렸는데,

gitignore에서 무시해야했던 빌드 결과들이 이미 올라가버린것;;; 

이럴거면 gitignore을 먼저 올리고 나중에 원본코드를 올리는게 맞았던것같다...

 

git filter-branch

git filter-branch --tree-filter 를 사용하여 Git(history에서도)과 Local에서 삭제할수있다.

 

$ git filter-branch --tree-filter 'rm -f 경로' HEAD

$ git push -f origin master

++ 삭제해야할 내용이 '폴더'이면 rm -f에 'r'옵션을 추가한다.

 

push 해야 하는 파일이 큰 경우

그러나 커밋하나당 5GB를 꽉꽉 채워서 Upload했었기 때문에 한번에 push하는데 Error 발생

remote: Analyzing objects... (498974/863067)
error: 리모트 묶음 풀기 실패: error TF402462: This push was rejected because its size is greater than the 5120 MB limit for pushes in this repository. 
Learn more at https://aka.ms/gitlimit To https://~~~
![remote rejected]       master -> master (TF402462: This push was rejected because its size is greater than the 5120 MB limit for pushes in this repository. Learn more at https://aka.ms/gitlimit)
error: 레퍼런스를 'https://~~'에 푸시하는데 실패했습니다

 

push 작업을 commit 하나하나를 단계적으로 하는 방법으로 했다. (시간이 굉장히 오래걸렸..걸리는중이다.)

$ git push <remotename> <commit SHA>:<remotebranchname>

https://stackoverflow.com/questions/3230074/how-can-i-push-a-specific-commit-to-a-remote-and-not-previous-commits

 

How can I push a specific commit to a remote, and not previous commits?

I have made several commits on different files, but so far I would like to push to my remote repository only a specific commit. Is that possible?

stackoverflow.com

 

git filter-branch 되돌리기

git filter-branch 명령어는 자동으로 backup을 수행한다 👍

$ git reset --hard refs/original/refs/heads/master

 

참고 사이트

https://www.dsaint31.me/etc/etc-git-filter-branch/

 

[Etc] Git에서 파일 완전삭제

파일의 모든 commit에서 영구적 삭제@(Computer)

www.dsaint31.me

 

레포지토리에서 내려받은 파일이 있고, 하나 더 같은 파일을 내려받고 싶을 떄 (ex.사본 만들기)

clone이 빠를때도 있지만 대용량인 경우에는 오히려 .git 폴더에서 checkout하는것이 훨씬 빠르다.

 

1. 새로 만들 directory 생성 후, 이미 내려받은 파일의  .git 복사해오기

2. $ git branch  현재 branch확인 

3. $ git checkout -f 

4. $ git pull (필요한 경우 사용. Git Directory의 가장 최근 commit을 불러옴)

3. Work on Current Change

 

0. Intro

CMD에 git을 입력하면 Commands 중에서 "Work on Current Change" 부분을 다뤄볼게요!

변경된 부분에 대한 작업! 이란 뜻인데, 저번 Start Working Area에서 Git을 통해 관리를 시작하는 방법을 정리했다면,

이번에는 그 작업들을 추가하고, 수정하고, 삭제하는 작업들에 대한 명령어입니다!

 

뭐가 있었냐면 add, mv, restore, rm 총 네 개가 있었습니다! 

뭔가 대충 무슨 느낌의 명령어 일지 예상 가지 않나요?! 아님... 말고요...ㅎ(설레발 주섬주섬)

 

 

1. Work on Current Change

1. Add: Working Directory상의 변경 내용을 Staging 영역에 추가하기 위해 사용하는 명령어

 

여기서 들 의문점 Staging 영역에 대해 짧게 짚고 넘어갈게요!

Staging AreaIndex라고 불리기도 하는데 곧 commit 할 파일들에 대한 정보를 저장하는 공간입니다!

변경된 내용들 중 commit할 내용을 판단하여 staging area에 add 하여 부분적으로 관리할 수 있는 장점이 있습니다.

 

사실 CLI를 사용할 때는 자주 사용했었는데, GUI를 사용한 이후로는 commit을 하면 add와 함께 이루어져서 잘 사용하진 않았던 거 같아요...ㅎㅎ 

그래도 Staging 영역에 올리는 버튼과 UnStaging버튼이 있었는데 추후 GUI 추가할게요!!

 

 

2. mv: 파일을 이동하거나 이름을 바꿀 때 사용한다.

마찬가지로 GUI에서는 마우스 우클릭으로 할 수 있는 작업인데, CLI로 공부하시는 분들을 위해 간단한 명령어 정리를 해둘게요!

 

$ git mv <filename> <newfilename> : 파일명을 변경할 때 사용

++ 추가로 mv를 하고 꼭 "commit"을 해주어야 변경이 된다고 합니다!

 

 

3. restore: 수정한 파일을 되돌릴 때 사용한다.

새로 생긴 명령어여서 생소할 수 있는 느낌인데 기존의 checkout과 같은 작업을 합니다!

$ git checkout -- test.txt   ‣   $ git restore test.txt

checkout이 브랜치를 변경할 때 사용하기도 하고, 수정한 파일을 되돌릴 때도 사용하기 때문에 헷갈리는 경우가 많았는데요!

이렇게 명령어가 분리되면서 명령어의 목적이 더 분명해졌습니다.

 

 

4. rm: 파일을 삭제한다.

명령어 그대로 remove! 파일을 삭제할 때 사용합니다. 마찬가지로 rm후에 commit 필수 작업입니다!

이것도 GUI에서는 마우스 우클릭으로나 상단 메뉴를 활용하여 쉽게 다룰 수 있던 부분이라서, 깊게는 안 본 듯하네요...

 

$ git rm <filename> : 로컬 디렉토리와 git 저장소 모두에서 파일을 삭제. 삭제 후에는 commit 필수!

$ git rm -f <filename> : 수정한 파일 또는 Staged 상태인 파일을 삭제하는 경우에는 -f 옵션 추가(commit하지 않은 경우)

$ git rm --cached <filename> : 로컬 디렉토리에서는 삭제하지 않지만 git에서는 삭제하는 경우 --cached 옵션 추가

$ git rm -r <directoryename> : 디렉토리를 삭제할 때 

 

 

공부를 하던 당시에도 Smart Git 내에서도 쉽게 버튼을 찾을 수 있었어서 자세히 공부하진 않았네요...

CLI로 공부하면서 개념을 잡고 넘어갔기 때문에 쉬웠던 걸지도 모르겠어요 😂😂

 

여유가 나는 대로 어떤 식으로 동작하는지 GUI 이미지도 추가하도록 하겠습니다! 많이 준비가 안되어있네요 😥

 


 

(꼬깃 Moment 😁)

얼마 전 회사 근처로 자취방을 옮겼어요!! 출퇴근 지하철 탈출 + 여가시간을 얻었습니다!! 🤩

그래서 블로그 글을 더 자주 정성 들여 쓸 수 있을 줄 알았는데...

게임을 하고 싶기도 하고... 집안일도 하고... 예상과는 빗나가고 있지만... 확실한 건 이전보단 여유로워졌다는 것!!

 

혹시 제 글을 보시는 분들... 직장 구하실 때 거리도 잘 보시고... 출퇴근 루트도 한번 보시는 걸 추천드려요...(제발)

저는 무려 왕복 3-4시간이 걸렸답니다😂😂 n개월을 그렇게 다니다가.. 결국엔....

아 맞다... 중기청에 대해서도 간단히 다뤄볼까 생각 중이에요... 태어나서 대출 처음 받아봤는데 복잡하기도 하고 그렇더라고요😖

 

할 말은 많지만 이게 본문이 될까 봐 더 못쓰겠어요..ㅎㅎ 얼른 일상 글도 스멀스멀 올려야겠어요🤣

이 글을 찾아주신 분들 모두 건강하시고 코로나 조심하세요!!😄😄

 

♡ 감사합니다!! 뿅!!

 

 

 

 

2. Start Working Area:: Repository와 Clone & Init

 

0. Git 설치는 되어있나요!?

 

우선 Git을 설치했다는 가정 하에 시작합니다!!

Git 설치 과정도 같이 작성하면 좋을 것 같긴 합니다만,

설치 부분은 자세히 나와있는 블로그도 많고 운영체제별, 버전별, 사이트도 달라지기 때문에...

구글링으로 맞는 블로그 보면서 설치하는 걸 추천드려요~!😁😁 (사실 자신 없음...ㅎㅎ)

 

cmd창을 켜시고 git 을 입력하세요!!

 

cmd에서 사용할수 있는 git 명령어들!!

 

위와 같이 나오면 정상적으로 설치가 된거구, 알 수 없는 명령어라고 나오면 설치가 제대로 안된 겁니다!

아래에 길게 영어로 쓰여있는 부분은 Git Commands인데요! 

파트별로 잘 나뉘어 사실 저 부분만 봐도 어떤 명령어가 어떤 느낌인지는 잡을 수 있을 겁니다!

 

 

...라고는 했지만🤔🤔

repository...  branch... 이게 다 무슨 말이죠...? (라고 생각했던 n개월 전 subing😂)

 

자주 쓰는 용어 위주로! 우선 작성하고 제가 빠트린 용어나 새로 배운 용어들은 추후 추가할게요!

 

우선 Git의 기초 개념을 잡는데 도움되었던 사이트 먼저 공유할게요😋

주임님이 보내주신 사이트인데 왕초보가 개념잡기에 가장 도움되었던 사이트인 것 같아요!

http://backlogtool.com/git-guide/kr/

 

저는 거의 명령어(Commit, push...ㅎ)만 알다 보니 저장소에 대한 개념이 없어서

그 부분부터 개념을 잡고 들어가니 그 뒤에 Commands를 이해하는데 수월했던 것 같아요!

 

그래서 처음에는 명령어보다 "기본 개념에 초점을 두고 개념을 잡아" 공부했습니다.

 

 

1) Repository

 

Git이 관리하고 있는 저장소를 의미합니다. 

크게 원격 저장소(Remote Repository)로컬 저장소(Local Repository)가 있습니다.

 

  • 로컬(local) 저장소: 내 컴퓨터 내에 있는 저장소.
    1. Working Directory: 실제로 소스코드를 작업하는 영역. .git, .gitignor폴더를 제외한 파일 또는 폴더! Git에 의해 관리(Version  Control) 대상이 됩니다.
    2. Staging Area: Working Directory에 git add 명령을 실행하면 Staging Area로 이동하며 이를 통해 소스코드 상태 정보를 확인할 수 있습니다. (Staged, Added 등등..)
    3. (local) Repository: Staging Area에 있는 소스코드에 git commit 명령을 실행하면 최종적으로 local directory에 반영됩니다.

 

  • 원격(remote) 저장소: Git 저장소.
    1. (remote) Repository: Git 서버에 존재하는 저장소! 라고 이해했습니다(아니면 지적 부탁드려요😂) 로컬 저장소에서 최종적으로 git push를 하면 Remote Repository에 올라가게 됩니다! (그러면 다른 사람들도 코드를 볼 수 있게 되겠지요!)

 

라고 이해하면 쉽게 생각할 수 있을 듯합니다!


 

2) Init과 Clone

 

출처: 이사님이 주신 세미나 자료

 

 start a working area에 딱 두 가지 명령어가 있었죠 init과 clone (가장 윗줄 참고해주세요!)

 

    1. init: Local Repository에서 생성한 .git폴더 생성하여 Working directory에 추가!!

    => init을 해석했을 때도 알 수 있듯, '초기화'할 때 사용! .git폴더를 추가하여 working directory를 git에 의해 관리하도록 합니다.

 

git init 하여 Initalized empty Git Repository

처음 공부할 때는 CLI로 공부했어서 이거뿐인데 GUI 버전도 곧 추가할게요!

(++ 추가완료! 22.03.31)

Repository > Add or Create

기존에 있는 폴더에서도 할수있고 새로 만드는 방법도 있네요! 

 

실제로 init이 잘 이루어졌는지 확인하려면 아래 이미지를 참고해주세요!

숨김폴더를 확인하면 .git 폴더가 추가된 것을 확인할 수 있습니다!

 

 

    2. clone: Remote Repository에서 생성한 .git폴더 생성하여 Working directory에 추가!!

    => git에 이미 올라와있는 Remote Repository에서 파일을 내려받을 때 사용! 프로젝트를 복제한다고 생각하면 이해가 쉬웠어요.

 

Repository > Clone

    • Remote Git or SVN repository: Git Url (ex. https://github.com/subin1004/gitproject.git)
    • Local Git repository: 컴퓨터내의 파일 경로 (ex. C:\Users\subin\AndroidStudioProjects\MyApplication)

 

Clone 완료!!

 

회사에서 공부하다 보니 GUI 툴은 Smart Git 사용했습니다! (지금도 사용하고 있구요😎)

무료로 개방되긴 하지만 작업이 제한되어 있고 상업용으로 유료로 라이센스를 얻어 사용한다고 합니다!!

위에 건 회사 프로젝트와는 별도(사실 저 때 프로젝트 clone권한도 없었어요..😋)로 제가 git 공부 때문에 별도로 공부한 부분이어서

추후 사진은 좀 가려질 경우도 있을 수 있을 것 같아요!! 최대한 안 하는 쪽으로 해볼게요!!

 

그리고 소스트리나 다른 프로그램으로 많이들 공부하시는 것 같아서 SmartGit에 관한 정보는 얻기 어려웠는데

한 발짝 먼저 시작한 제가 조금이나마 도움이 되었으면 하는 마음에 최대한 열심히 적어보겠습니다!🤗

 

다른 Git GUI보다 어렵다고 하더라고요! UI적으로 복잡한 것도 있고 Commands에 대한 지식도 더 많이 요구한다고 해요!

사실 저는 GUI를 Smart Git으로 처음 시작했기 때문에 처음부터 차근차근 받아들였어요..ㅎㅎ

 


 

 

벌써 1시네요... 6시간 뒤에 기상해야 하므로 얼른 잠들어볼게요!🤣🤣

TMI로 자가격리 해제후 바쁜..? 시간을 보내고 있답니다... 회사에 녹아드는 중이랄까요...

하지만 한없이 부족하고 모자라고... 아직 파악하는데 어려움을 앓는 중이랍니다...

나중에 #일상 카테고리에...ㅎㅎ 내일은 옥상에서 바람 쐴 여유가 생기길🙏

 

이 글을 찾아주신 분들 모두 건강하시고 코로나 조심하세요!!😄😄

 

♡ 감사합니다!! 뿅!!

 

 

👩: 그래서 Git은 왜 써야 하는 거죠? 면접 보려고 쓰는 건 아니잖아요?
🧑: Git 안 쓰고도 프로젝트 가능하던데요? 

라는 태아 시절 Subing의 의문점이었습니다..

BUT!!

Git을 공부하고 실제로 사용하면서 배운 Git을 쓰면 좋은 점! 써야만 하는 이유! 를 개발자 관점에서 적어봤어요😙

 

크게 두 가지✌로 나눠봤습니다.

  1. 버전 관리
  2. 협업

 

 

1. 버전 관리

 

부끄럽네요...😅 커밋메시지도 갈겨버리는 신입의 패기...

 

입사 후, Developer 공식문서와 예제 파일을 테스트해보기 위해  여러 가지 기능을 추가한 프로젝트의 Git Log입니다.

회사에서 리뷰를 했는데 그 과정을 보여드릴 때 우선 Git Log로 어떻게 진행했는지 진행률이 어느 정도인지를 보여드리기에 적합했습니다. 

 

  1. 버전을 달리하려면 프로젝트를 다른 이름으로 저장해야 하는 불편함이 있기 때문에, (또한 매우 보기 안 좋고 헷갈림😡)

        → 기능이 추가되었거나, 오류사항을 수정했을 때 등에 commit을 사용하여 메시지와 함께 관리할 수 있고,

 

  1. 뭔가 잘못되어서 되돌리고 싶을 때, 이전의 Subing은 전부 찾아서 고치거나... Ctrl + z를 연발했다면..ㅎㅎ;; (이 과정에서 잘했던 부분도 다 지워지거나... 돌이키기 힘든 실수를 하는 경우도 많죠!!)

        → commit 해둔 내용을 다시 받아와서 작업하는(reset & revert)! 똑똑한 버전 관리를 할 수 있게 되었습니다😎

 

2. 협업

이것도 응애들의 대잔치이니 그저 Example로만 받아들여주세요 😥

 

사실 회사에서 Git 사용법을 아는지에 대해 물어보는 이유는 저번 포스트에서 작성했듯이

팀원들과 협업하는데 빠르게 적응을 할 수 있는가 에 대한 답변을 듣기 위함입니다.

 

회사에선 여러 명의 개발자가 한 프로젝트를 하는 경우가 많은데, (학교에서 하는 소규모 팀 프로젝트에서도 마찬가지예요😃)

Git을 사용한다면,

  • 일일이 코드를 비교해서 수정하는 번거로움이 사라집니다.
  • 코드가 변경된 이력을 쉽게 확인할 수 있습니다.
  • 어느 부분이 추가/수정/삭제되었는지 볼 수 있고, 반대로 제가 추가한 기능을 다른 개발자가 확인할 수 있습니다.
  • 물론 같은 부분을 수정해서충돌(Conflict)이 발생하기도 합니다만, 생각보다 쉽게 고칠 수 있습니다.

        (추후에 수정하는 법은 따로 게시글로 다뤄볼게요🤗)

 

쓰다 보니 장황하지만 내용은... 잘 모르겠네요..ㅎㅎ 하지만 실제 면접에서는 이정도로 간단하게 답변하면 될 것 같습니다!!

추후에 계속해서 수정할 내용이니 이 정도로 정리해보겠습니다😋

 

혹시라도 읽어주신 분 감사드리고 좋은 하루 보내시길 바랄게요❤

코로롱 조심하시고요!!

 

 

♡ 감사합니다!! 뿅!!

 

+ Recent posts