Git-Issue

[Git Issue] 특정 파일만 push 할수있는지 ?

갓태희 2021. 5. 29. 03:05

오픈톡에서 어떤분이 질문을 해주셨는데 요점은 특정 파일 혹은 폴더만 push 할수 있는지여쭤보셨다. 나같은 경우 gid add *으로 그냥 일일이 변경된 내용을 체크하기 귀찮아서 저 명령어를 통해 다 스테이징 영역에 올리는데 이렇게 다 스테이징 영역에 올려버리니까 커밋도 모든 파일이 되는 경우가 많았고 보통 push를 전체적으로 하지 부분만 해본적은 별로 없었던것 같아서 처음 저 말을 듣고 좀 당황했었다.

소스트리나 다른 내장되어있는 깃 툴을 이용하게 되면 자기가 스테이징하고싶은 파일을 쉽게 볼수 있고 버튼을 눌러서 일일이 하거나 복수선택으로 스테이징 할수있는데 커맨드로도 그렇게 물론 할수 있지만 귀찮아서 걍 다 올려버리는 경우가 많았던것 같다.

결론을 할수있다이며 git add를 할때 자기가 push 하고싶은 파일들만 add하면 되고 add된 파일만 커밋해서 push 하면 된다.

여기서 중요한 개념은 스테이징 영역에 올리는것은 git add이며 이렇게 스테이징 된 파일들만 커밋할수 있다는 것이며 커밋된 파일만 push 할수있다.

그럼 git pull은 어떨까 ?? git pull은 결론적으로 말하면 특정 파일만 pull한다라는 말 자체가 성립이 안된다.

왜냐하면 git pull은 파일을 가져오는게 아니라 커밋을 가져와서 내 로컬에 merge까지 하는것이다. 이게 무슨말이냐면

위의 사진은 Github에 저장된 Commit 내역이다 이 커밋은 해시값으로 이루어져 있는데 오른쪽에 보면 5608352이런 숫자가 보일텐데 이것들이 그 커밋의 해시 값이다 이 값은 git에서 SHA-1이라는 알고리즘을 통해 자동으로 계산해주는 파일이 아닌 이며 커밋은 각각 Staging된 변경 내역들을 저장하고있기 때문에 이것이 곧 Git이 Version Control할수 있는 이유가 된다. 근데 생각을 해보니 트릭을 써서 특정 파일만 받아오면 될것같다

어차피 이 커밋도 파일들의 변경사항의 정보를 가지고있는 것이므롤 내가 원하는 특정 파일만 상대방에게 push해달라고 하면 나는 그 파일의 변경내용만 pull 받아오면 되기때문에 안될건 없는것 같다.