리포지터리

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

리포지터리는 코드를 저장하고 그에 대한 변경을 수행하는 곳입니다. 변경 사항은 버전 관리로 추적됩니다.

프로젝트에는 리포지터리가 포함되어 있습니다.

리포지터리 생성

리포지터리를 생성하려면 다음을 수행할 수 있습니다:

리포지터리는 프로젝트 없이 존재할 수 없습니다. 프로젝트에는 많은 항목이 포함되는데, 그중 하나가 리포지터리입니다.

리포지터리에 파일 추가

다음과 같이 파일을 리포지터리에 추가할 수 있습니다:

  • 프로젝트를 생성할 때
  • 프로젝트 생성 후에 웹 에디터, UI, 또는 명령줄을 사용하여 추가합니다.

UI에서 파일 추가

GitLab UI에서 파일을 업로드할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 파일을 업로드할 디렉터리로 이동합니다.
  3. 디렉터리 이름 옆에서 플러스 아이콘 () > 파일 업로드를 선택합니다.
  4. 필드를 작성합니다. 변경 내용으로 Merge Request을 만들려면 리포지터리의 기본 브랜치가 아닌 브랜치 이름을 입력합니다.
  5. 파일 업로드를 선택합니다.

리포지터리에 변경 사항 커밋

리포지터리의 브랜치에 변경 사항을 커밋할 수 있습니다. 명령줄을 사용하면 푸시하기 전에 여러 번 커밋할 수 있습니다.

  • 커밋 메시지: 커밋 메시지는 무엇이 변경되었는지와 왜 변경되었는지를 식별합니다. GitLab에서는 커밋 메시지에 키워드를 추가하여 다음 중 하나의 작업을 수행할 수 있습니다:
    • GitLab CI/CD 파이프라인 트리거: 프로젝트가 GitLab CI/CD로 구성된 경우 커밋 당 파이프라인을 트리거합니다.
    • 파이프라인 건너뛰기: 커밋 메시지에 ci skip 키워드를 추가하여 GitLab CI/CD가 파이프라인을 건너뛸 수 있습니다.
    • 이슈 및 Merge Request 교차 링크: 교차 링크를 사용하여 관련 워크플로의 부분을 추적합니다. 커밋 메시지에서 이슈나 Merge Request을 언급하면 해당 스레드에 표시됩니다.
  • 커밋 Cherry-pick: GitLab에서는 UI에서 커밋을 Cherry-pick할 수 있습니다.
  • 커밋 되돌리기: 선택한 브랜치로부터 UI에서 커밋을 되돌릴 수 있습니다.
  • 커밋 서명: 커밋에 서명하여 추가 보안을 제공할 수 있습니다.

리포지터리 복제

명령줄을 사용하여 리포지터리를 복제할 수 있습니다.

아니면 코드 편집기로 바로 복제할 수도 있습니다.

Apple Xcode에서 복제하고 열기

.xcodeproj 또는 .xcworkspace 디렉터리를 포함하는 프로젝트는 macOS의 Xcode에서 복제할 수 있습니다.

  1. GitLab UI에서 프로젝트 개요 페이지로 이동합니다.
  2. 오른쪽 상단에서 Code를 선택합니다.
  3. Xcode를 선택합니다.

프로젝트가 컴퓨터에 복사되고 Xcode를 열 것인지 묻습니다.

Visual Studio Code에서 복제하고 열기

모든 프로젝트는 GitLab UI에서 Visual Studio Code로 복제할 수 있지만, GitLab Workflow VS Code 확장 프로그램을 설치하여 Visual Studio Code에서 복제할 수도 있습니다:

  • GitLab 인터페이스에서:
    1. 프로젝트 개요 페이지로 이동합니다.
    2. 오른쪽 상단에서 Code를 선택합니다.
    3. IDE에서 열기 아래에서 Visual Studio Code (SSH) 또는 Visual Studio Code (HTTPS)를 선택합니다.
    4. 프로젝트를 복제할 폴더를 선택합니다.

      Visual Studio Code가 프로젝트를 복제한 후에 해당 폴더를 엽니다.

  • Visual Studio Code에서 확장 프로그램을 설치한 상태에서는 확장 프로그램의 Git: Clone 명령을 사용합니다.

IntelliJ IDEA에서 복제하고 열기

GitLab UI에서 IntelliJ IDEA로 모든 프로젝트를 복제할 수 있습니다.

전제 조건:

다음을 수행하여 복제할 수 있습니다:

  1. 프로젝트 개요 페이지로 이동합니다.
  2. 오른쪽 상단에서 Code를 선택합니다.
  3. IDE에서 열기 아래에서 IntelliJ IDEA (SSH) 또는 IntelliJ IDEA (HTTPS)를 선택합니다.

리포지터리에서 코드 다운로드

리포지터리에 저장된 소스 코드를 다운로드할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 파일 디렉터리 위에서 Code를 선택합니다.
  3. 옵션에서 다운로드할 파일을 선택합니다.

    • 소스 코드: 보고 있는 현재 브랜치에서 소스 코드를 다운로드합니다. 사용 가능한 확장자: zip, tar, tar.gz, tar.bz2.
    • 디렉터리: 특정 디렉터리를 다운로드합니다. 하위 디렉터리를 보고 있을 때만 표시됩니다. 사용 가능한 확장자: zip, tar, tar.gz, tar.bz2.
    • 아티팩트: 최신 CI 작업의 아티팩트를 다운로드합니다.

생성된 아카이브의 체크섬은 리포지터리 자체가 변경되지 않아도 변경될 수 있습니다. 예를 들어 Git이나 GitLab이 사용하는 제3자 라이브러리가 변경된 경우에 발생할 수 있습니다.

리포지터리 언어

각 리포지터리의 기본 브랜치에 대해 GitLab은 사용된 프로그래밍 언어를 결정합니다. 이 정보는 프로젝트 개요 페이지에 표시됩니다.

리포지터리 언어 막대

새 파일이 추가되면이 정보가 업데이트되기까지 최대 다섯 분이 소요될 수 있습니다.

리포지터리 언어 추가

모든 파일이 프로젝트 개요 페이지에 감지되어 나열되는 것은 아닙니다. 문서, 공급 업체 코드 및 대부분의 마크업 언어는 제외됩니다.

기본 설정을 무시하도록 설정을 변경할 수 있습니다.

  1. 리포지터리의 루트 디렉터리에서 .gitattributes라는 파일을 만듭니다.
  2. GitLab이 이 유형의 파일을 포함하도록 하는 줄을 추가합니다. 예를 들어, .proto 파일을 활성화하려면 다음 코드를 추가합니다.

    *.proto linguist-detectable=true
    

지원되는 데이터 유형의 디렉터리을 보려면 지원되는 데이터 유형을 확인하세요.

이 기능은 과도한 CPU를 사용할 수 있습니다. 자세한 정보는 문제 해결 섹션을 참조하십시오.

지원되는 마크업 언어

파일이 다음 파일 확장자 중 하나를 사용하는 경우 GitLab은 파일의 마크업 언어 내용을 UI에 렌더링합니다.

마크업 언어 확장자
일반 텍스트 txt
마크다운 mdown, mkd, mkdn, md, markdown
reStructuredText rst
AsciiDoc adoc, ad, asciidoc
Textile textile
Rdoc rdoc
Org mode org
creole creole
미디어위키 wiki, mediawiki

README 및 색인 파일

README 또는 index 파일이 리포지터리에 있을 때, GitLab은 해당 파일의 내용을 렌더링합니다. 이러한 파일은 일반 텍스트이거나 지원되는 마크업 언어의 확장자를 가질 수 있습니다.

  • READMEindex 파일이 모두 있는 경우 README가 항상 우선합니다.
  • 동일한 이름을 가진 여러 파일이 있고 확장자가 다른 경우 파일은 알파벳순으로 정렬됩니다. 확장자가없는 파일은 마지막에 정렬됩니다. 예를 들어, README.adocREADME.md보다 우선하며, README.rstREADME보다 우선합니다.

OpenAPI 뷰어

GitLab은 OpenAPI 사양 파일을 렌더링할 수 있습니다. 파일 이름은 반드시 openapi 또는 swagger를 포함하고 확장자는 yaml, yml, 또는 json이어야 합니다. 다음 예는 모두 올바릅니다.

  • openapi.yml
  • openapi.yaml
  • openapi.json
  • swagger.yml
  • swagger.yaml
  • swagger.json
  • gitlab_swagger.yml
  • openapi_gitlab.yml
  • OpenAPI.YML
  • openapi.Yaml
  • openapi.JSON
  • openapi.gitlab.yml

OpenAPI 파일을 렌더링하려면:

  1. 리포지터리의 OpenAPI 파일로 이동합니다.
  2. 소스 표시편집 버튼 사이에서 OpenAPI 표시를 선택합니다. OpenAPI 파일이 발견되면 렌더링된 파일 표시 버튼이 바뀝니다.
  3. 연산 디렉터리에서 operationId를 표시하려면 쿼리 문자열에 displayOperationId=true를 추가합니다.
note
쿼리 문자열에 displayOperationId가 있고 아무 값을 가지면 true로 평가됩니다. 이 동작은 Swagger의 기본 동작과 일치합니다.

리포지터리 크기

  • GitLab 15.3에서 도입, 대체 리포지터리 크기 계산을 위한 피처 플래그 gitaly_revlist_for_repo_sizegitaly_catfile_repo_size.

플래그: Self-managed GitLab에서는 기본적으로 GitLab이 리포지터리의 크기를 결정하기 위해 du -sk 명령을 사용합니다. GitLab은 대신 git-rev-list (피처 플래그 gitaly_revlist_for_repo_size로 활성화됨) 또는 git-cat-file (피처 플래그 gitaly_catfile_repo_size로 활성화됨)를 사용할 수 있습니다. 다른 계산 방법 간에 전환하려면 관리자가 이러한 피처 플래그를 활성화하거나 비활성화할 수 있습니다.

프로젝트 개요 페이지에는 리포지터리 파일, 아티팩트 및 LFS를 모두 포함한 파일의 크기가 표시됩니다. 파일 크기는 최대 15분마다 업데이트됩니다. 압축, 하우스키퍼 및 기타 요소로 인해 크기는 한 인스턴스에서 다른 인스턴스로 약간 다를 수 있습니다.

관리자는 리포지터리 크기 제한을 설정할 수 있습니다. GitLab은 GitLab.com을 위해 크기 제한을 설정합니다.

리포지터리 기여자 분석

기여자 분석에서 프로젝트 구성원이 수행 한 커밋 디렉터리 및 차트를 볼 수 있습니다.

리포지터리 히스토리 그래프

리포지터리 그래프는 브랜치 및 Merge을 포함한 리포지터리 네트워크의 시각적인 히스토리를 표시합니다. 이 그래프는 리포지터리에서 사용된 Git 플로 전략을 시각화하는 데 도움이 될 수 있습니다.

프로젝트의 코드 > 리포지터리 그래프로 이동합니다.

리포지터리 Git 플로우

리포지터리 경로 변경 시 발생하는 일

리포지터리 경로가 변경되면 GitLab은 이전 위치에서 새 위치로의 전환을 처리합니다.

사용자 이름을 바꾸거나, 그룹 경로를 변경하거나, 또는 리포지터리를 이름을 바꿀 때 다음과 같이 처리됩니다:

  • 이름 공간 및 해당 하위 항목에 대한 URL은 새 URL로 리디렉션됩니다.
  • 이름 공간 아래의 프로젝트의 Git 원격 URL은 새 원격 URL로 리디렉션이 됩니다. 변경된 위치에 푸시 또는 풀하는 경우 원격을 업데이트하라는 경고 메시지가 표시됩니다. 리디렉션이 지지되는 동안, 자동화 스크립트 또는 Git 클라이언트는 이름 변경 후에 계속 작동합니다.
  • 기존 경로가 다른 그룹, 사용자 또는 프로젝트에 의해 요청되지 않는 한 리디렉션이 사용 가능합니다.
  • 명시적으로 API 리디렉션을 따라야 할 수 있습니다.

경로를 변경한 후에는 리디렉션을 따라갈 수 없기 때문에 다음 리소스의 기존 URL을 업데이트해야합니다.

  • 포함 문장, 그렇지 않으면 파이프라인이 구문 오류로 실패합니다. CI/CD 컴포넌트 참조는 리디렉트를 따를 수 있습니다.
  • 숫자 네임스페이스 및 프로젝트 ID 대신 인코딩 된 경로를 사용하는 네임스페이스 API 호출.
  • 도커 이미지 참조.
  • 프로젝트 또는 네임스페이스를 지정하는 변수.

관련 주제

문제 해결

리포지터리 언어: 과도한 CPU 사용

리포지터리 파일에 어떤 언어가 포함되어 있는지 확인하기 위해 GitLab이 Ruby gem을 사용합니다. 이 gem이 파일을 구문 분석하여 해당 유형을 확인하는 경우 프로세스가 과도한 CPU를 사용할 수 있습니다. 이 gem에는 구문 분석이 필요한 파일 확장자를 정의하는 휴리스틱 구성 파일이 포함되어 있습니다.

.txt 확장자를 가진 파일 및 gem에서 정의되지 않은 확장자를 가진 XML 파일은 과도한 CPU를 사용할 수 있습니다.

해결책은 특정 파일 확장자에 할당할 언어를 지정하는 것입니다. 같은 방식으로 잘못 식별된 파일 유형을 수정할 수 있습니다.

  1. 지정할 언어를 확인합니다. gem에는 알려진 데이터 유형을 위한 구성 파일이 포함되어 있습니다. 예를 들어, 텍스트 파일에 대한 항목을 추가하려면:

    Text:
      type: prose
      wrap: true
      aliases:
      - fundamental
      - plain text
      extensions:
      - ".txt"
    
  2. 리포지터리 루트에 .gitattributes 파일을 추가하거나 수정합니다:

    *.txt linguist-language=Text
    

*.txt 파일에는 휴리스틱 파일에 항목이 있습니다. 이 예제는 해당 파일의 구문 분석을 방지합니다.

리포지터리로 푸시하는 순서 검색

커밋이 “사라진” 것처럼 보인다면, 리포지터리로 푸시하는 순서를 검색하세요. 이 StackOverflow 게시물에는 강제 푸시 없이 이러한 상태에 빠질 수 있는 방법이 설명되어 있습니다. 또 다른 원인은 git reset 작업에서 HEAD 참조를 변경하는 서버 후크 설정의 오류일 수 있습니다.

아래의 샘플 코드 출력을 통해 대상 브랜치에 대한 푸시 순서를 확인할 수 있습니다. 출력을 통해 이동할 때마다 commit_from이 이전 푸시의 commit_to와 동일해야 합니다. 이러한 순서의 중단점은 하나 이상의 커밋이 리포지터리 기록에서 “잃어졌음”을 나타냅니다.

rails console을 사용하여 마지막 100개의 푸시를 확인하고 commit_fromcommit_to 항목을 출력하는 다음 예제를 참조하세요:

p = Project.find_by_full_path('project/path')
p.events.pushed_action.last(100).each do |e|
  puts "%-20.20s %8s...%8s (%s)", e.push_event_payload[:ref], e.push_event_payload[:commit_from], e.push_event_payload[:commit_to], e.author.try(:username)
end ; nil

아래는 순서의 중단점이 있는 출력 예제입니다(4번째 줄):

master f21b07713251e04575908149bdc8ac1f105aabc3...6bc56c1f46244792222f6c85b11606933af171de root
master 6bc56c1f46244792222f6c85b11606933af171de...132da6064f5d3453d445fd7cb452b148705bdc1b root
master 132da6064f5d3453d445fd7cb452b148705bdc1b...a62e1e693150a2e46ace0ce696cd4a52856dfa65 root
master 58b07b719a4b0039fec810efa52f479ba1b84756...f05321a5b5728bd8a89b7bf530aa44043c951dce root
master f05321a5b5728bd8a89b7bf530aa44043c951dce...7d02e575fd790e76a3284ee435368279a5eb3773 root