Automatic .gitignore generation

GitHub Docs: Ignoring files

  • .gitignore 파일은 git add 할때 이 파일들은 빼놓고 하라는 뜻입니다.
  • 보안상 민감한 파일일 수도 있고 github 용량제한을 넘어서는 대용량 파일일 수도 있습니다.
  • 한참 일을 하다보니 발생한 대용량 파일을 잊고 커밋했다가 문제가 되었습니다.
  • 이를 방지하고자 .gitignore 파일을 자동으로 생성하는 간단한 프로그램을 만들었습니다.

1. .gitignore 파일 구조

github/gitignore

  • .gitignore는 아주 간단한 구조를 가지고 있습니다.
  • add하지 않을 파일의 목록을 상대경로로 적어주기만 하면 됩니다.
  • 제 .gitignore 파일의 일부입니다.

    1
    2
    3
    4
    data_ml/X_train_full.pkl
    data_ml/X3_test_full.pkl
    data_ml/X3_train_full.pkl
    data_ml/X3_full_poolconv.pkl
  • 더 좋은 구조를 갖춘 .gitignore 파일의 예시를 모아둔 곳도 있습니다

  • vim 같은 텍스트 편집기로 열어서 항목을 추가하면 됩니다.

2. .gitignore 파일 자동 생성 프로그램 제작

  • 용량이 50 MB를 넘어서는 파일을 자동으로 모아 자동으로 .gitignore를 만들어 봅시다.
  • 파일 생성이 귀찮은게 저만은 아니었는지, 이런 일을 하는 프로그램이 종종 보입니다.

2-1. 파이썬 프로그램 제작

  • 다음과 같이 짧은 프로그램을 만듭니다.
  • make_gitignore.py라는 이름으로 저장했습니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env python
    # coding: utf-8
    import os

    files_50m = "50m.txt"

    # 1. find files larger than 50M
    cmd_50m = f"find -size +50000k > {files_50m}"
    os.system(cmd_50m)

    # 2. edit lines and save
    items = []
    line = " "
    with open(files_50m, "r") as rf:
    wf = open(".gitignore", "w")
    while len(line):
    line = rf.readline()
    if ".git" not in line.split("/"):
    add_item = line.lstrip("./")
    items.append(add_item)
    wf.write(add_item)
    wf.close()

    # 3. verification
    [print(item.rstrip("\n")) for item in items]
  • 코드는 이런 작업을 합니다.
    1. 50MB를 넘는 파일 명단 작성 (50m.txt)
    2. 파일을 열어서 한 줄 한 줄 보면서
      2-1. .git이 포함된 파일은 무시하고
      2-2. 상대경로 처음 부분 ./ 삭제
      2-3. 바뀐 내용을 .gitignore 파일에 저장
    3. 목록을 출력합니다.

2-2. alias 설정

  • 파이썬 프로그램을 만들었지만 이걸 실행하려고 python make_gitignore.py를 입력하기 번거롭습니다.
  • 그냥 mg만 입력하면 되게 하고 싶네요.
  • .bashrc 파일을 열고 한 줄 적어줍니다.
    1
    alias mg='python /workplace/utils/make_gitignore/make_gitignore.py'
  • 위 줄에서 /workplace/utils/make_gitignore/는 제가 파일을 저장한 경로입니다.
  • 각자 자기 설정에 맞게 변경하시면 됩니다.

2-3. 환경설정 적용

  • source ~/.bashrc를 해서 바뀐 설정을 적용합니다.

3. 실행

  • 이제 작업공간으로 가서 커밋하기 전에 명령어를 한 줄 실행합니다.
    1
    mg

  • git add, commit에 이어 push도 해봅니다.

  • 잘 됩니다.


도움이 되셨나요?

카페인을 투입하시면 다음 포스팅으로 변환됩니다

Share