저장소
Offering: GitLab.com, 자체 관리, GitLab 전용
저장소는 코드를 저장하고 그에 대한 변경 사항을 추적하는 곳입니다.
각 프로젝트는 저장소를 포함하고 있습니다.
저장소 생성
저장소를 생성하려면 다음을 수행할 수 있습니다:
- 프로젝트 생성 또는
- 기존 프로젝트 포크.
프로젝트 없이는 저장소를 만들 수 없습니다. 프로젝트에는 여러 가지가 포함되어 있는데, 그 중 하나가 저장소입니다.
파일 추가
다음 방법으로 파일을 저장소에 추가할 수 있습니다:
UI에서 파일 추가
GitLab UI에서 파일을 업로드할 수 있습니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 파일을 업로드할 디렉토리로 이동합니다.
- 디렉토리 이름 옆에서 플러스 아이콘() > 파일 업로드를 선택합니다.
- 필드를 완료합니다. 변경 내용에 대한 병합 요청을 만들려면 저장소의 기본 브랜치가 아닌 다른 브랜치 이름을 입력합니다.
- 파일 업로드를 선택합니다.
저장소에 변경 사항 커밋
저장소의 브랜치에 변경 사항을 커밋할 수 있습니다. 명령줄을 사용할 때 푸시하기 전에 여러 번 커밋할 수 있습니다.
-
커밋 메시지:
커밋 메시지는 무엇이 변경되었는지와 왜 변경되었는지를 나타냅니다.
GitLab에서는 커밋 메시지에 키워드를 추가하여 다음 중 하나를 수행할 수 있습니다:
- GitLab CI/CD 파이프라인 트리거: 프로젝트가 GitLab CI/CD로 구성되어 있는 경우, 커밋 당이 아니라 푸시 당으로 파이프라인을 트리거합니다.
-
파이프라인 건너뛰기:
커밋 메시지에
ci skip
키워드를 추가하여 GitLab CI/CD가 파이프라인을 건너뛸 수 있습니다. - 이슈 및 병합 요청 교차 링크: 교차 링크를 사용하여 작업 흐름의 관련 부분을 추적할 수 있습니다. 커밋 메시지에서 이슈 또는 병합 요청을 언급하면 해당 스레드에 표시됩니다.
- 커밋체리-픽: GitLab에서는 UI에서 커밋을 체리-픽할 수 있습니다.
- 커밋 되돌리기: UI에서 선택한 브랜치로 커밋을 되돌릴 수 있습니다.
- 커밋 서명: 커밋에 서명하여 추가 보안을 더하기가능합니다.
저장소 복제
명령줄을 사용하여 저장소를 복제할 수 있습니다.
또한 코드 편집기에 직접 복제할 수 있습니다.
Apple Xcode에서 복제하고 열기
.xcodeproj
또는 .xcworkspace
디렉토리를 포함하는 프로젝트는 macOS의 Xcode로 복제할 수 있습니다.
- GitLab UI에서 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단에서 Code를 선택합니다.
- Xcode를 선택합니다.
프로젝트가 컴퓨터에 복제되고 Xcode를 열도록 안내받게 됩니다.
Visual Studio Code에서 복제하고 열기
- GitLab 13.10에서 도입됨.
모든 프로젝트는 GitLab 사용자 인터페이스에서 Visual Studio Code로 복제할 수 있지만 GitLab Workflow VS Code 확장 프로그램을 설치하여 Visual Studio Code에서 복제할 수도 있습니다:
- GitLab 인터페이스에서:
- 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단에서 Code를 선택합니다.
- IDE에서 열기 아래에서 Visual Studio Code (SSH) 또는 Visual Studio Code (HTTPS)를 선택합니다.
- 프로젝트를 복제할 폴더를 선택합니다.
Visual Studio Code가 프로젝트를 복제한 후에 해당 폴더가 열립니다.
- 확장 프로그램이 설치된 Visual Studio Code에서는
확장의
Git: 복제
명령을 사용할 수 있습니다.
IntelliJ IDEA에서 복제 및 열기
모든 프로젝트는 GitLab 사용자 인터페이스에서 IntelliJ IDEA로 복제할 수 있습니다.
전제 조건:
- JetBrains Toolbox App도 설치되어 있어야합니다.
다음을 수행하려면:
- 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단에서 Code를 선택합니다.
- IDE에서 열기에서 IntelliJ IDEA(SSH) 또는 IntelliJ IDEA (HTTPS)를 선택합니다.
저장소에서 코드 다운로드
저장소에 저장된 소스 코드를 다운로드할 수 있습니다.
- 왼쪽 사이드 바에서 검색 또는 이동하여 선택을 선택하고 프로젝트를 찾습니다.
- 파일 목록 위에서 Code를 선택합니다.
-
옵션 중에서 다운로드하려는 파일을 선택합니다.
-
소스 코드:
보고있는 현재 브랜치의 소스 코드를 다운로드합니다.
사용 가능한 확장자:
zip
,tar
,tar.gz
, 및tar.bz2
. -
디렉토리:
특정 디렉토리를 다운로드합니다. 하위 디렉토리를 보고 있을 때만 표시됩니다.
사용 가능한 확장자:
zip
,tar
,tar.gz
, 및tar.bz2
. - 아티팩트: 최신 CI 작업의 아티팩트를 다운로드합니다.
-
소스 코드:
보고있는 현재 브랜치의 소스 코드를 다운로드합니다.
사용 가능한 확장자:
생성된 아카이브의 체크섬은 저장소 자체가 변경되지 않아도 변경될 수 있습니다. 예를 들어, Git이나 GitLab이 사용하는 써드 파티 라이브러리가 변경되었을 때 발생할 수 있습니다.
저장소 언어
GitLab은 각 저장소의 기본 브랜치에 대해 사용된 프로그래밍 언어를 결정합니다. 이 정보는 프로젝트 개요 페이지에서 표시됩니다.
새로운 파일이 추가되면 이 정보가 업데이트되기까지 최대 5분이 소요될 수 있습니다.
저장소 언어 추가
모든 파일이 프로젝트 개요 페이지에 감지되고 표시되는 것은 아닙니다. 문서, 벤더 코드 및 대부분의 마크업 언어는 제외됩니다.
기본 설정을 재정의하여 이 동작을 변경할 수 있습니다.
- 저장소의 루트 디렉토리에
.gitattributes
라는 이름의 파일을 생성합니다. -
GitLab에 파일을 포함하도록 지시하는 줄을 추가합니다. 예를 들어,
.proto
파일을 활성화하려면 다음 코드를 추가합니다:*.proto linguist-detectable=true
지원되는 데이터 유형의 목록을 보려면 지원되는 데이터 유형을 참조하세요.
이 기능은 과도한 CPU를 사용할 수 있습니다. 자세한 내용은 문제 해결 섹션을 참조하세요.
지원되는 마크업 언어
파일의 확장자 중 하나를 가지고 있는 경우 GitLab은 파일의 마크업 언어 내용을 UI에 렌더링합니다.
마크업 언어 | 확장자 |
---|---|
일반 텍스트 | txt
|
마크다운 |
mdown , mkd , mkdn , md , markdown
|
리스트럭처드 텍스트 | rst
|
AsciiDoc |
adoc , ad , asciidoc
|
텍스타일 | textile
|
Rdoc | rdoc
|
Org mode | org
|
크레올 | creole
|
미디어위키 |
wiki , mediawiki
|
README 및 인덱스 파일
저장소에 README
또는 index
파일이 있는 경우 GitLab은 해당 내용을 렌더링합니다.
이 파일들은 일반 텍스트일 수도 있고
지원되는 마크업 언어의 확장자를 가질 수도 있습니다.
-
README
및index
파일이 모두 있는 경우 항상README
가 우선합니다. - 같은 이름이지만 다른 확장자를 가진 여러 파일이 있는 경우 파일은
알파벳 순서로 정렬됩니다. 확장자가 없는 파일은 마지막에 정렬됩니다.
예를 들어,
README.adoc
는README.md
보다 우선하며,README.rst
는README
보다 우선합니다.
OpenAPI 뷰어
- GitLab 12.6에서 도입되었습니다.
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 파일을 렌더링하려면:
- 저장소의 OpenAPI 파일로 이동합니다.
- 소스 표시 및 편집 버튼 사이에서 OpenAPI 표시를 선택합니다. OpenAPI 파일을 찾으면 렌더링된 파일 표시 버튼이 대체됩니다.
- 작업 목록에
operationId
를 표시하려면 쿼리 문자열에displayOperationId=true
를 추가합니다.
참고:
쿼리 문자열에 displayOperationId
가 있고 어떤 값이 있으면 true
로 평가됩니다.
이 동작은 Swagger의 기본 동작과 일치합니다.
저장소 크기
- 소개됨 in GitLab 15.3, feature flags
gitaly_revlist_for_repo_size
andgitaly_catfile_repo_size
for alternative repository size calculations.
du -sk
명령을 사용합니다. GitLab은 대신 git-rev-list
(기능 플래그 gitaly_revlist_for_repo_size
로 활성화됨)나 git-cat-file
(기능 플래그 gitaly_catfile_repo_size
로 활성화됨)를 사용할 수 있습니다. 다른 계산 방법으로 전환하려면 관리자가 이러한 기능 플래그를 활성화하거나 비활성화할 수 있습니다.프로젝트 개요 페이지에서 리포지토리의 모든 파일 크기가 표시됩니다. 파일 크기는 최대 15분 간격으로 업데이트됩니다. 파일 크기에는 리포지토리 파일, 아티팩트 및 LFS가 포함됩니다.
압축, 정리 및 기타 요인으로 인해 크기가 서로 약간 다를 수 있습니다.
관리자는 저장소 크기 제한을 설정할 수 있습니다. GitLab은 GitLab.com을 위한 크기 제한을 설정합니다.
저장소 기여자 분석
프로젝트 멤버가 만든 커밋 목록 및 차트를 기여자 분석에서 확인할 수 있습니다.
저장소 히스토리 그래프
저장소 그래프는 브랜치 및 병합을 포함한 저장소 네트워크의 시각적인 히스토리를 표시합니다. 이 그래프는 저장소에서 사용되는 Git 플로 전략을 시각화하는 데 도움이 될 수 있습니다.
프로젝트의 코드 > 저장소 그래프로 이동합니다.
저장소 경로 변경 시 발생하는 일들
저장소 경로가 변경되면 GitLab은 이전 위치에서 새 위치로의 전환을 처리합니다.
사용자 이름을 변경, 그룹 경로를 변경하거나 저장소를 이름 바꿈할 때:
- 해당 네임스페이스 및 프로젝트와 관련된 URL은 새 URL로 리디렉션됩니다.
- 네임스페이스 아래의 프로젝트의 Git 원격 URL은 새 원격 URL로 리디렉션됩니다. 위치가 변경된 저장소로 push 또는 pull할 때 원격을 업데이트하라는 경고 메시지가 표시됩니다. 자동화 스크립트 또는 Git 클라이언트는 이름이 바뀐 후에 계속 작동합니다.
- 리디렉션이 다른 그룹, 사용자 또는 프로젝트에 의해 기존 경로가 요청되지 않는 한 사용 가능합니다.
- API 리디렉션은 명시적으로 따라야 할 수 있습니다.
경로를 변경한 후에는 리디렉트를 따를 수 없기 때문에 기존 URL을 업데이트해야 합니다.
-
include:component
를 제외한 include 문은 파이프라인 실행이 구문 오류로 실패하므로 업데이트해야 합니다. CI/CD 구성 요소 참조는 리디렉션을 따를 수 있습니다. - 숫자형 네임스페이스와 프로젝트 ID 대신 인코딩된 경로를 사용하는 네임스페이스화된 API 호출.
- 도커 이미지 참조.
- 프로젝트 또는 네임스페이스를 지정하는 변수.
관련 주제
- GitLab Workflow VS Code 확장 프로그램
- Lock 파일 및 충돌 방지
- 저장소 API
- 파일 찾기
- 브랜치
- 디렉토리 만들기
- 파일 기록 찾기
- 라인별 변경 사항 식별하기 (Git blame)
- GitLab에서 Jupyter 노트북 사용하기
문제 해결
저장소 언어: 과도한 CPU 사용
저장소 파일 내 어떤 언어가 있는지를 결정하기 위해 GitLab은 Ruby gem을 사용합니다. Ruby gem이 파일을 분석하여 그 종류를 결정하면 과도한 CPU를 사용할 수 있습니다. 이 Ruby gem에는 파일 확장자를 구문 분석하기 위해 필요한 휴리스틱 구성 파일이 포함되어 있습니다.
.txt
확장자를 가진 파일 및 gem에서 정의되지 않은 확장자를 가진 XML 파일은 과도한 CPU를 사용할 수 있습니다.
해결책은 특정 파일 확장자에 지정할 언어를 지정하는 것입니다. 동일한 방법은 잘못 식별된 파일 유형도 수정할 수 있어야 합니다.
-
지정할 언어를 식별하세요. Ruby gem에는 알려진 데이터 유형에 대한 구성 파일이 포함되어 있습니다. 예를 들어 텍스트 파일에 대한 항목을 추가하려면:
Text: type: prose wrap: true aliases: - fundamental - plain text extensions: - ".txt"
-
저장소 루트에
.gitattributes
를 추가하거나 수정합니다.*.txt linguist-language=Text
*.txt
파일에는 휴리스틱 파일이 포함되어 있습니다. 이 예제는 이러한 파일의 구문 분석을 방지합니다.
저장소로의 푸시 순서 검색
커밋이 “실수로” 없어졌다고 생각된다면, 저장소로의 푸시 순서를 검색하세요.
이 StackOverflow 글에는 강제 푸시 없이도 이 상태에 빠질 수 있는 경우에 대해 설명되어 있습니다. 다른 이유는 git reset
작업에서 HEAD
참조를 변경하는 서버 후크가 구성되지 않은 경우일 수 있습니다.
아래의 샘플 코드 출력에서 대상 브랜치에 대해 다음과 같은 이산성을 확인할 수 있습니다.
새로운 푸시의 commit_from
은 이전 푸시의 commit_to
와 같아야 합니다.
이러한 순서의 중단은 하나 이상의 커밋이 저장소의 히스토리에서 “잃어졌다”는 것을 나타냅니다.
rails console을 사용하여, 다음 예제는 마지막 100개의 푸시를 확인하고 commit_from
및 commit_to
항목을 인쇄합니다:
p = Project.find_by_full_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