- Git / Github 사용하며 지켜야할 것.
우선 조금 Git, Github에 대해서 깊게 파기 전에,
내가 현재 갖고 있는 지식에 기반하여 해당 질문에 대해 바로 떠오른 생각을 먼저 정리해 보겠다.
Git 은 버전 관리 시스템으로 개발을 해나가면서 프로그래밍 기록을 관리해주는 시스템이다. Git에서 시간적인 개념이 적용된 여러 도구들을 활용해 파일들을 관리할 수 있다.
Github는 Git이란 기술을 이용해 더 협업적인 관점에서 사용하게 해주는 플랫폼이다. 다수의 프로젝트 개입자가 한 레포지토리를 공유하며(다양한 방식으로 공유하고 프로젝트를 구성한다! 이건 나중에 또 정리 예정) 단일 프로젝트에 대해 협업해 나간다.
Git은 시점에 따라서 브랜치를 나누는 것이 포인트라고 생각된다. 이 관념적인 개념으로 한 프로젝트에 다수의 개발자가 동시에 각각의 파트에 대해서 개발이 가능하고, 각 개발자의 코드 버전들이 일치할 수 있게 해주는 것이다.
사용하며 지켜야할 것은 이 포인트에서 또한 비롯되는 것 같다. 다수 이용자가 프로젝트를 구성하면서 지켜야할 것은 단일 프로젝트로써 잘 동작해야 한다. 서로간에 충돌이 일어나서는 안 되며 데이터의 공백이 생기는 것 또한 절대 금물이다. 그리고 서로의 작업 상황에 대해서 알 수 있도록 항상 기록을 남기고 이를 실시간으로 확인할 수 있어야 한다.
따라서 한 번 Push한 기록에 대해서(Repository에 올라간 작업물)는 충분한 협의가 이뤄지기 전에는 함부로 수정 및 삭제를 해서는 안 된다. 그것들은 이미 협의를 통해 공유되고 있는 자원이기 때문이다. 또한 Local에서 작업 시에도 rebase, merge 등의 작업에 대해서 다른 이용자의 작업물과 겹치는 부분이 있는 지 적절하게 확인해가며 수행해야 한다.
그래서 우선 어떤 명령어를 익히고 실행하는 것보다는 내 작업이 커밋되며 이게 전체 프로젝트에 어떤 임팩트를 줄 지에 대해 신경 써야하는 것이 중요하다고 생각된다.
이제부터 Git에 관한 인터뷰 질문들을 확인해보고 스스로 답변하고 보충해가며
더 깊이 있게 Git과 Github에 대해서 정리해보겠다.
1. What is Git ?
🙍♀️ 해당 질문은 위에서 대답했으므로 내 의견은 생략
👨🏫 Git은 VersionControlSystem으로 시간에 따른 파일들의 변화를 추적한다.( 다른 소리인데 tracking이란 단어를 보통 추적이라고 번역하는데 개인적으로 추적이란 뜻은 개념적인 설명에 좀 안 와닿는다.) 그럼으로 인해서 몇몇의 사용자들이 함께 일하는 것을 돕고자 한다. Git은 개발자와 비개발자 모두 이용할 수 있도록해서 더 다양한 이용자들이 큰 프로젝트를 효과적으로 관리하게 한다.
2. What do you understand about Version Control System ?
🙍♀️ 말 그대로 버전 관리 시스템인데, 파일에 일어나는 변화들을 모두 기록하고, 그 변화들이 의미 있는 시점(버전)이 될 때를 따로 기록에 남겨둬서 해당 버전에 대한 파일 상황을 확인할 수 있게 하는 통합 관리 시스템이라고 생각합니다.
👨🏫 VCS는 파일들은 물론 모든 데이터의 변화를 기록합니다. 그래서 추후에 필요에 의해서 이 변화들을 확인할 수 있게 합니다. 이런 기술은 팀의 멤버들이 항상 가장 최신의 파일들을 기준으로 작업을 할 수 있게 돕습니다.
3. What's the difference of the Git and Github?
🙍♀️ Git은 소프트웨어 프로그램이고, Github는 Git을 이용한 플랫폼 정도로 생각됩니다. Git이란 기록 프로그램을 더 직관적인 사용 형태로 보여주고 이용할 수 있는 것이라고 알고 있습니다. Github에서 다수의 이용자들이 공유할 레포지토리라는 서비스를 제공하고 이에 따른 여러 툴을 사용해 다양한 작업을 할 수 있게 해주는 것입니다.
👨🏫 Git은 소프트웨어이고, Github는 서비스입니다. Git은 local환경에서 설치되며, Github는 웹 환경에서 호스트됩니다. Git은 GUI라는 인터페이스를 제공하며, Github는 Github Desktop이라는 데스크탑 인터페이스를 제공합니다. Git은 사용자 관리 기능을 지원하지 않지만, Github는 사용자가 관리하는 영역을 제공합니다.
4. What is a Git Repository?
🙍♀️ 프로젝트를 관리하는 공간입니다. Github에서 제공하며 해당 Repository에서 프로젝트를 운영하여 여러 사용자들이 해당 레포지토리에서 공통으로 작업할 수 있게 해줍니다.
👨🏫 Git Repository는 파일들이 저장되는 공간을 지칭합니다. 이 파일들은 Local Repository에서 저장될 수도 있고, Remote Respository에 저장될 수도 있습니다.
+ 🙆♀️ 아, Repository가 local환경에도 있다는 것을 알면서도 순간 Remote환경의 Repo만 생각했다.. Local과 Remote간의 Push, Pull 을 사용하면서도 순간 헷갈렸다. 다시 개념 정립하고 간다.
5. How can you initialize Repository in Git?
🙍♀️ 음 Git init이라는 키워드를 사용해서 Local git을 해당 폴더에서 만들었던 것 같습니다. 그러면 Git관련 파일/폴더가 해당 폴더에 설치되었습니다. Remote환경(Github이용)에서는 new repository라는 키워드로 새 Repo를 만들고 이를 Local Git과 연결시키는 작업까지 완료합니다.
👨🏫 Local 에서 Git init이란 키워드를 타이핑하면 숨겨지는 .git 이란 파일이 생깁니다.
6. How is different Git between with SVN(SubVersioN)?
🙍♀️ 잘 모르겠습니다. SVN이라는 시스템을 과거에 사용했다는 정도만 알고 있습니다. Git이 협업 관점에서 더 나아서 바뀌었다는 기억 정도입니다.
👨🏫 Git은 분산형 Version Control System이고, SVN은 중앙집중형 VCS입니다. Git은 메타데이터 형태로 컨텐츠를 저장하고, SVN은 파일 형태로 컨텐츠를 저장합니다. Git은 master가 최신 버전은 릴리즈하며 SVN은 Trunk directory에서 최신 버전들을 릴리즈합니다. Git의 내용들은 SHA-1알고리즘에 의한 해시코드 값으로 저장되지만, SVN은 컨텐츠를 해싱하지 않습니다.
+ 🙆♀️ 아, SVN이란게 있었다는 것만 알고 뭔지는 제대로 몰랐는데 짧게나마 정리하고 가서 지적공백이 메워지는 것 같아 좋다. 효율성을 넘어서 안전성 문제에서도 Git이 더 괜찮은 느낌이었구나를 알게 되었다. SHA-1알고리즘은 3학년 네트워크 보안 강의에서 들은 적이 있다. 방금 궁금해져서 과거 강좌 내역 확인했는데, 내가 배운 건 SHA-512 알고리즘이고, SHA-1은 SHA-2(SHA-512)의 이전 버전 알고리즘인 듯 하다.
설명에 대한 내 첨언 하나 더 하면, 작년인가부터 Git은 master가 아닌 main을 주력 브랜치 이름으로 쓰고 있다. master는 slave라는 주종관계를 뜻해 의미가 좋지 않기도 하고, 정말 많이 쓰이는 키워드이기에 5개의 알파벳보다는 4개의 알파벳이 공간절약이 된다는 뜻이라고 봤었다. 해당 웹게시글이 언제 쓰인 지는 몰라도 조금 이전 글인가 생각이 들었다. 뭐 크게 중요한 건 아니니 일단 패스한다.
7. Name a few Git Command with their function
🙍♀️
- Git config - git에 대해서 환경 설정할 수 있는 명령어
- Git add - 현재 local에서 untrack/ track되고 있는 파일/폴더들을 staging area에 올리게 하는 명령어
- Git diff - 어떤 파일에 대해서 변경 사항을 확인(이전 파일과 비교)할 수 있게 해주는 명령어
- Git init - 처음에 Git repository로 초기화하는 명령어
- Git commit - 변경 사항을 저장하는 명령어(local에서만 저장되게
👨🏫
8. What are the advantages of the Git?
🙍♀️ 이전 버전들이 확인이 가능해서 프로젝트 진행 척도를 파악할 수 있다. 가장 최신 버전을 팀원 간에 공유할 수 있어 협업에 유익하다. 구 버전들의 파일을 확인할 수 있기에 진행 내용이 잘 못 되었을 때 회귀가 가능하다.
👨🏫 릴리즈 사이클이 빨라집니다. 팀원 간의 협업이 쉬워집니다. 코드의 무결성이 보장됩니다. Pull Request의 사용이 가능해집니다.
9. What lanuage is used in Git?
🙍♀️ 확신할 수 없지만 파일, 디렉토리 등 시스템적인 부분을 직접적으로 관리하므로 C가 아닐까 생각됩니다.
👨🏫 더 빠르고 신뢰성 있는 VCS를 위해 Git은 C를 사용합니다. C언어는 더 상위계층 언어에서 흔한 런타임의 오버헤드를 줄여주기 때문입니다.
10. What is the correct syntax to add a message to a commit?
🙍♀️ git commit -m " [head] : [content] "
👨🏫 git commit -m "x files created"
질답 참고 링크
https://www.simplilearn.com/tutorials/git-tutorial/git-interview-questions
Top 40 Git Interview Questions and Answers for Experienced and Freshers [2022]
Uncover the top 40 Git interview question that will help you prepare for your interview and crack your next interview in the first attempt!
www.simplilearn.com
'Thing about programming > Git' 카테고리의 다른 글
[ Git ] 브랜치 지우기 (0) | 2022.08.02 |
---|---|
[ Git ] 브랜치 2개 병합 삽질 기록. 으쌰으쌰 (0) | 2022.07.31 |
[Git] LF와 CRLF (0) | 2022.07.18 |
[Git] 로컬 폴더 - 깃허브 레포 연결 (0) | 2022.07.15 |