gitignore 파일에 대해서 간단한 문제로 실습해 보도록 하겠습니다. 저는, 프로젝트를 관리할 때 이 파일의 존재를 몰랐습니다. 그런데, 누군가는 그러한 파일로 관리를 하고 있었습니다. 저는, git에 올라가면 안 되는 파일들을 모두 삭제한 다음에 올리곤 했는데.

 

 오늘의 문제는 이것입니다. project 루트 폴더에 dirT가 있습니다. 이 폴더에 있는 것 중에 init.txt만 git에 올라가게끔 하고, 나머지는 다 올라가지 않게 해 봅시다. 물론, .idea라던지, out이라던지 ex1.imi은 버전 관리에 올라가지 말아야 한다는 것이 이미 셋팅 되어 있다고 가정합시다. 이것을 위해서 github에 하는 건 좀 그러니, 제 거실 컴퓨터 ubuntu 20.04에 직접 gitlab을 구축해서 진행하였습니다.

 


 git에 올릴 프로젝트 구조입니다.

 

 여기서 우리는 프로젝트의 root Directory는 init.txt를 제외하고 깃에 반영되지 않아야 합니다. 그리고 data 밑에 있는 모든 파일들은 반영되어야 합니다. 여기서, 우리는 먼저 제외해야 할 것부터 적습니다. 루트의 dirT입니다.

 

 

 먼저 이렇게 적어보겠습니다.

 

 

 프로젝트의 root 폴더로 가서, git rm -rf --cached .와 git add .을 입력하였습니다. 그러고 나서 확인을 해 보겠습니다.

 

 

 루트의 dirT 디렉토리가 모두 제외가 되긴 하지만, data 밑의 dirT 폴더도, data의 testT 밑에 있는 dirT 파일도 모두 제외가 됨을 알 수 있습니다.

 

 그러면 dirT/ 요렇게 바꿔 보겠습니다.

 

 

 git cache를 초기화 하고 다시 보면, dirT는 제외가 되었음을 알 수 있습니다. 그런데, data 밑에 있는 dirT도 제외가 되었습니다. 문제는, 이것까지 제외가 되면 안 된다는 것입니다. 사실, 저렇게 관리할 리가 없긴 하지만요.

 

 

 /dirT는 테스트를 해 볼 수 없으니, gitgnore에 /dt를 쳐 보겠습니다. 루트 폴더에 dt 파일을 추가하였습니다. 그리고 gitignore 파일에 이 부분을 추가해 보겠습니다. 그러면 아래와 같이 바뀌었음을 확인할 수 있습니다.

 

 

 루트에 있는 dt 파일도 제외가 된다. dirT 디렉토리가 있는 위치에 dirT 파일을 만들지는 글쎄요. 그러면, 이 파일이 있는 위치에, dirT 파일이 있었다면 이것 마저도 무시했을 겁니다. 그러면 요래 작성하면 어떨까요?

 

 

 /dt/라고 입력하면, 어떨까요? 깃 관련 셋팅 파일이 프로젝트의 루트 폴더에 있었습니다.

 

 

 그러면, 루트에 있는 dt 파일은 포함됨을 알 수 있습니다. 그렇다면, 루트에 있는 dirT 폴더를 버전 관리에서 제외하고자 한다면, 깃그노어 파일에 /dirT/ 라고 입력하면 된다는 것을 추론하기에는 그리 어렵지는 않습니다. 그런데 현실적으로 저런 식으로 관리가 안 될는 미지수네요.

 

 어찌 되었던 깃그노어 파일에 해당 패턴을 추가하면, 패턴과 매치되는 파일은 버전 관리에서 제외한다. 정도만 눈치 채셔도 좋습니다. 자세한 것은 공식 문서를 보는 편이..

 


 그런데 문제는, dirT에서 init.txt만 제외 대상에서 제거하라고 했습니다. 루트 폴더에서 하는 방법도 있을 거 같은데, 저에게는 쉽지 않더라고요. /dirT/ 패턴을 주고 !/dirT/init.txt를 주면 될 거 같았는데. 안 되면 다른 방법을 써야 겠습니다.

 

 

 dirT 아래에 .gitignore 파일을 새로 만듭니다.

 

 

 그러면, root의 /dirT/ 패턴은 없애도 무난할 겁니다.

 

 

 다음에, dirT 밑에 깃그노어 파일을 추가하는데, 모든 파일을 무시하되, 2개만 무시하지 않도록 설정하겠습니다. 그럴려면, 앞에 !을 붙이면 됩니다. 우리는 init.txt만 무시하지 않도록 설정을 하라고 했으므로, 위와 같이 setting 하시면 됩니다. init.txt라던지, .gitignore를 폴더명으로 설정하지 않는 이상은 알아서 잘 맞을 겁니다. 아마도. 처음에 *를 하면, 모든 폴더 및 파일이 무시 목록에 추가 됩니다.

 

 그런데, !.gitignore라던지, !init.txt를 입력하면 어떨까요? 그러면, 이 두 파일은 무시하지 못하게 됩니다.

 

 

 dirT 밑에 있는 2개가 초록색으로 표시 되어 있음을 알 수 있습니다. 실제로, git에 반영해서 확인을 해 봅시다.

 

 

 그러면 이렇게 2개의 파일이 반영 되었음을 알 수 있습니다. 더 중요한 것은 pw.txt가 반영되지 않았다는 겁니다. 여기서 문제. 이렇게만 해도 될까요? 문서에 따르면 아래와 같습니다. 부모가 이미 제외 되었다면, 다시 include 하는 것은 안 된다. 그러니 이렇게 하면 되겠네요. root 폴더의 깃그노어에서는 /dirT/ 패턴이 들어가지 않았으니, 프로젝트의 루트 폴더에 있는 dirT는 무시되지 않았고, 그 밑에 있는 init.txt의 부모 폴더는 dirT인데, 이것은 무시되지 않았습니다. 그러니, 무시 목록에서 제외될 수 있습니다.

 

 앞에 !이 안 붙으면 무시를 하지 않고, 그렇지 않으면 무시한다 정도만 기억하셔도 충분할 듯 싶습니다. 이건 1줄짜리 내용인데.