- 리포지터리 생성
- 리포지터리에 파일 추가
- 리포지터리에 변경 사항 커밋
- 리포지터리 복제
- 리포지터리에서 코드 다운로드
- 리포지터리 언어
- 리포지터리 크기
- 리포지터리 기여자 분석
- 리포지터리 히스토리 그래프
- 리포지터리 경로 변경 시 발생하는 일
- 관련 주제
- 문제 해결
리포지터리
리포지터리는 코드를 저장하고 그에 대한 변경을 수행하는 곳입니다. 변경 사항은 버전 관리로 추적됩니다.
각 프로젝트에는 리포지터리가 포함되어 있습니다.
리포지터리 생성
리포지터리를 생성하려면 다음을 수행할 수 있습니다:
리포지터리는 프로젝트 없이 존재할 수 없습니다. 프로젝트에는 많은 항목이 포함되는데, 그중 하나가 리포지터리입니다.
리포지터리에 파일 추가
다음과 같이 파일을 리포지터리에 추가할 수 있습니다:
- 프로젝트를 생성할 때
- 프로젝트 생성 후에 웹 에디터, UI, 또는 명령줄을 사용하여 추가합니다.
UI에서 파일 추가
GitLab UI에서 파일을 업로드할 수 있습니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 파일을 업로드할 디렉터리로 이동합니다.
- 디렉터리 이름 옆에서 플러스 아이콘 () > 파일 업로드를 선택합니다.
- 필드를 작성합니다. 변경 내용으로 Merge Request을 만들려면 리포지터리의 기본 브랜치가 아닌 브랜치 이름을 입력합니다.
- 파일 업로드를 선택합니다.
리포지터리에 변경 사항 커밋
리포지터리의 브랜치에 변경 사항을 커밋할 수 있습니다. 명령줄을 사용하면 푸시하기 전에 여러 번 커밋할 수 있습니다.
-
커밋 메시지:
커밋 메시지는 무엇이 변경되었는지와 왜 변경되었는지를 식별합니다.
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에서 복제할 수 있습니다.
- GitLab UI에서 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단에서 Code를 선택합니다.
- Xcode를 선택합니다.
프로젝트가 컴퓨터에 복사되고 Xcode를 열 것인지 묻습니다.
Visual Studio Code에서 복제하고 열기
- GitLab 13.10에서 도입되었습니다.
모든 프로젝트는 GitLab UI에서 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: Clone명령을 사용합니다.
IntelliJ IDEA에서 복제하고 열기
GitLab UI에서 IntelliJ IDEA로 모든 프로젝트를 복제할 수 있습니다.
전제 조건:
- JetBrains Toolbox 앱도 설치되어 있어야 합니다.
다음을 수행하여 복제할 수 있습니다:
- 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단에서 Code를 선택합니다.
- IDE에서 열기 아래에서 IntelliJ IDEA (SSH) 또는 IntelliJ IDEA (HTTPS)를 선택합니다.
리포지터리에서 코드 다운로드
리포지터리에 저장된 소스 코드를 다운로드할 수 있습니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 파일 디렉터리 위에서 Code를 선택합니다.
-
옵션에서 다운로드할 파일을 선택합니다.
-
소스 코드:
보고 있는 현재 브랜치에서 소스 코드를 다운로드합니다.
사용 가능한 확장자:
zip,tar,tar.gz,tar.bz2. -
디렉터리:
특정 디렉터리를 다운로드합니다. 하위 디렉터리를 보고 있을 때만 표시됩니다.
사용 가능한 확장자:
zip,tar,tar.gz,tar.bz2. - 아티팩트: 최신 CI 작업의 아티팩트를 다운로드합니다.
-
소스 코드:
보고 있는 현재 브랜치에서 소스 코드를 다운로드합니다.
사용 가능한 확장자:
생성된 아카이브의 체크섬은 리포지터리 자체가 변경되지 않아도 변경될 수 있습니다. 예를 들어 Git이나 GitLab이 사용하는 제3자 라이브러리가 변경된 경우에 발생할 수 있습니다.
리포지터리 언어
각 리포지터리의 기본 브랜치에 대해 GitLab은 사용된 프로그래밍 언어를 결정합니다. 이 정보는 프로젝트 개요 페이지에 표시됩니다.
새 파일이 추가되면이 정보가 업데이트되기까지 최대 다섯 분이 소요될 수 있습니다.
리포지터리 언어 추가
모든 파일이 프로젝트 개요 페이지에 감지되어 나열되는 것은 아닙니다. 문서, 공급 업체 코드 및 대부분의 마크업 언어는 제외됩니다.
기본 설정을 무시하도록 설정을 변경할 수 있습니다.
- 리포지터리의 루트 디렉터리에서
.gitattributes라는 파일을 만듭니다. -
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은 해당 파일의 내용을 렌더링합니다.
이러한 파일은 일반 텍스트이거나 지원되는 마크업 언어의 확장자를 가질 수 있습니다.
-
README및index파일이 모두 있는 경우README가 항상 우선합니다. - 동일한 이름을 가진 여러 파일이 있고 확장자가 다른 경우 파일은 알파벳순으로 정렬됩니다. 확장자가없는 파일은 마지막에 정렬됩니다.
예를 들어,
README.adoc는README.md보다 우선하며,README.rst는README보다 우선합니다.
OpenAPI 뷰어
GitLab은 OpenAPI 사양 파일을 렌더링할 수 있습니다. 파일 이름은 반드시 openapi 또는 swagger를 포함하고 확장자는 yaml,
yml, 또는 json이어야 합니다. 다음 예는 모두 올바릅니다.
openapi.ymlopenapi.yamlopenapi.jsonswagger.ymlswagger.yamlswagger.jsongitlab_swagger.ymlopenapi_gitlab.ymlOpenAPI.YMLopenapi.Yamlopenapi.JSONopenapi.gitlab.yml
OpenAPI 파일을 렌더링하려면:
- 리포지터리의 OpenAPI 파일로 이동합니다.
- 소스 표시와 편집 버튼 사이에서 OpenAPI 표시를 선택합니다. OpenAPI 파일이 발견되면 렌더링된 파일 표시 버튼이 바뀝니다.
- 연산 디렉터리에서
operationId를 표시하려면 쿼리 문자열에displayOperationId=true를 추가합니다.
displayOperationId가 있고 아무 값을 가지면 true로 평가됩니다. 이 동작은 Swagger의 기본 동작과 일치합니다.리포지터리 크기
- GitLab 15.3에서 도입, 대체 리포지터리 크기 계산을 위한 피처 플래그
gitaly_revlist_for_repo_size및gitaly_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 플로 전략을 시각화하는 데 도움이 될 수 있습니다.
프로젝트의 코드 > 리포지터리 그래프로 이동합니다.
리포지터리 경로 변경 시 발생하는 일
리포지터리 경로가 변경되면 GitLab은 이전 위치에서 새 위치로의 전환을 처리합니다.
사용자 이름을 바꾸거나, 그룹 경로를 변경하거나, 또는 리포지터리를 이름을 바꿀 때 다음과 같이 처리됩니다:
- 이름 공간 및 해당 하위 항목에 대한 URL은 새 URL로 리디렉션됩니다.
- 이름 공간 아래의 프로젝트의 Git 원격 URL은 새 원격 URL로 리디렉션이 됩니다. 변경된 위치에 푸시 또는 풀하는 경우 원격을 업데이트하라는 경고 메시지가 표시됩니다. 리디렉션이 지지되는 동안, 자동화 스크립트 또는 Git 클라이언트는 이름 변경 후에 계속 작동합니다.
- 기존 경로가 다른 그룹, 사용자 또는 프로젝트에 의해 요청되지 않는 한 리디렉션이 사용 가능합니다.
- 명시적으로 API 리디렉션을 따라야 할 수 있습니다.
경로를 변경한 후에는 리디렉션을 따라갈 수 없기 때문에 다음 리소스의 기존 URL을 업데이트해야합니다.
- 포함 문장, 그렇지 않으면 파이프라인이 구문 오류로 실패합니다. CI/CD 컴포넌트 참조는 리디렉트를 따를 수 있습니다.
- 숫자 네임스페이스 및 프로젝트 ID 대신 인코딩 된 경로를 사용하는 네임스페이스 API 호출.
- 도커 이미지 참조.
- 프로젝트 또는 네임스페이스를 지정하는 변수.
관련 주제
- GitLab Workflow VS Code 확장 프로그램
- 잠금 파일 및 변경 충돌 방지
- 리포지터리 API
- 파일 찾기
- 브랜치
- 디렉터리 만들기
- 파일 이력 찾기
- 라인으로 변경 내용 식별하기 (Git blame)
- Jupyter 노트북과 GitLab 사용하기
문제 해결
리포지터리 언어: 과도한 CPU 사용
리포지터리 파일에 어떤 언어가 포함되어 있는지 확인하기 위해 GitLab이 Ruby gem을 사용합니다. 이 gem이 파일을 구문 분석하여 해당 유형을 확인하는 경우 프로세스가 과도한 CPU를 사용할 수 있습니다. 이 gem에는 구문 분석이 필요한 파일 확장자를 정의하는 휴리스틱 구성 파일이 포함되어 있습니다.
.txt 확장자를 가진 파일 및 gem에서 정의되지 않은 확장자를 가진 XML 파일은 과도한 CPU를 사용할 수 있습니다.
해결책은 특정 파일 확장자에 할당할 언어를 지정하는 것입니다. 같은 방식으로 잘못 식별된 파일 유형을 수정할 수 있습니다.
-
지정할 언어를 확인합니다. 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('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


도움말