command line 노트

iterms2에서 repository clone해서 commit, push까지 연습하기

Jonchann 2020. 4. 5. 01:29

거의 항상 Pycharm VCS에서 github repository를 clone해서 commit, push를 해 왔기 때문에 command로 git 어쩌구 하는건 솔직히 익숙하지 않은데 이것때문에 중요한거 중요한 때에 대차게 날려먹지 싶다.
지금까지는 어차피 나 혼자 하는거고 Pycharm이 거의 다 해주기도하고 iterms2에서는 필요할 때 필요한 것만 구글링 해서 했었는데 제대로 좀 알아보고 숙지한 상태에서 해봐야지 싶었다.

그래서 머리 속에서 정리 좀 해볼겸 쓴다.

 

iterms2에서 처음 git을 시작할 때에는

$ git init

으로 초기화 시켜주어야 한다.

 

github에서 연습용 새 repository를 하나 만들어준 뒤 clone or download를 눌러 링크를 복사한다.

$ git clone [copied_url]

을 repository 폴더를 생성하고 싶은 위치해서 입력하면 [repository_name]폴더가 생성된다.
github가 아닌 다른 서버에서 clone 해 오는건 다음에 쓸 것이다 (사실 SSH용 가져오면 된다..).

 

새 맥북에서 git 초기화가 처음이라 github의 user_name과 email을 입력하라는 명령이 나온다.

 

파일을 add하고 commit, push까지 하기 위해 일단 아무 파일이나 생성한다.

$ touch sample.txt

위와 같은 경우에서 touch는 해당 폴더에 sample.txt가 존재하는지 확인한 후 있다면 아무 일도 일어나지 않는다. 하지만 만약 없다면 sample.txt라는 파일을 생성해 줄 것이다.

굳이 맥락상 필요는 없지만 얘기 나온 김에 적어놓자면, touch로 여러 파일을 생성하고 싶을 때에는

$ touch [file_1_name], [file_2_name], [file_3_name]

과 같이 쭉 나열해서 적어주면 된다.

 

본론으로 돌아와서 텅 빈 txt파일만 repository에 보내기는 아쉬우니까(?) 한 마디라도 내용을 적어주자.

$ vim sample.txt
i
[what you wanna type in]
[esc]
:wq

 

파일을 올리기 전에 내가 누군지 알려줘야 commit시에 에러가 뜨지 않는다.

$ git config --global user.email "[your_email_address]"
$ git config --global user.name "[your_name]"

이건 한 번 해주면 re-init해도 다시 입력할 필요가 없다.

 

드디어 파일을 올린다.
add는 local의 작업 폴더에서 index까지 올라간 것이기 때문에 아직 remote의 repository에는 파일이 추가되지 않는다.

$ git add [file_name]

이젠 추가하는 파일에 대한 메모를 적어 commit할 것이다.
이 시점에도 아직 remote의 repository에는 파일도 메모도 추가되지 않는다.

$ git commit -m "[commit_memo]"

 

이제는 push할 일만 남았는데 나는 항상 새 repository를 만들 때 README.md로 시작을 한다.
분명히 clone할 때 README.md파일을 같이 가져 왔을텐데도

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/[your_name]/[repository_name].git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

에러가 뜬다.

그래서

$ git pull [remote_name] [branch_name]

일단 remote에 있는 모든걸 받아봤다.

참고로 여기서는 remote_name, branch_name이라는 식으로 적어놨는데 어차피 일반적으로 처음에는 remote_name은 origin이고 branch_name은 master다.

branch만들고 checkout하는건 다음에 쓸거다.

 

인터넷 환경이 별로일 때에는 아래와 같은 에러도 나오는데 시간을 좀 뒀다가 다시 시도하면 잘 된다.

fatal: unable to access 'https://github.com/[your_name]/[repository_name].git/': Could not resolve host: github.com

만약 그래도 안된다면 stack overflow의 could not resolve host github.com error while cloning remote repository in git 같은 글을 보고 해결하면 될 것 같다.

 

제대로 README.md파일이 들어 있었다.
다른 변화는 없었다.

이제 push를 하자.

$ git push [remote_name] [branch_name]

하.. 또 똑같은 pull하라는 error가 뜬다.
README.md말고 뭐 또 없을텐데 자꾸 pull하라 하니까 짜증난다.

 

 

다 지우고 새로 했다.
제대로 코드 잔뜩 쓰기 전에 이런걸 해 봐야지 암...

 

이유를 알았다.
git init한 폴더에 이미 뭐가 잔뜩 있었다.
새로 깨끗하게 하위 폴더를 만들어서 re-init해야 한다.

 

이미 git이 초기화 되어있는 폴더에서

$ rm -rf .git

을 해서 일단 지워준다.

 

새로 만든 깔끔한 하위 폴더에서

$ git init
$ git clone [your_repository_url]
$ git add sample.txt
$ git commit -m "create sample.txt"
$ git push [remote_name] [branch_name]

을 시전한다.

 

아 깔끔하다.
에러 하나 없이 한 방에 성공했다.

 

아, sample.txt는 미리 clone한 local 폴더에 넣어놔야 한다.
여기서 local 폴더는 하위 폴더의 하위 폴더가 되겠다.

 

 

교훈: 새로운 것을 시작할 때에는 무조건 깔끔하게 시작하자