Git | GitLab

[GitLab] API로 원격 저장소 파일 읽기

비번변경 2024. 5. 9. 00:56

개요

GitLab 저장소에 저장되어 있는 파일을 클론하지 않고 내용을 확인하고 싶다. 웹 요청이나 API를 통해 확인할 수 있을 것 같은데, 이 글에서는 GitLab API를 이용해 레포지터리에 저장된 파일 정보를 확인해본다.

 

 

원격지 파일 정보 확인

원격 저장소에 저장된 파일에 대한 정보는 다음의 url로 요청할 수 있다. 요청 시 원격지 프로젝트의 아이디 값과 확인할 파일의 경로를 지정해주어야 하는데, 파일에 경로에는 branch 정보도 포함되어야 한다. branch 정보는 ref 속성으로 지정한다.

GET /projects/:id/repository/files/:file_path

# 예시
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=main"

요청에 대한 응답에는 파일의 이름, 경로, 크기, 인코딩 정보, 파일 내용, 브랜치 등이 포함된다. 참고로 파일 내용에 대한 정보인 content는 base64로 인코딩 되어 있다.

{
  "file_name": "key.rb",
  "file_path": "app/models/key.rb",
  "size": 1476,
  "encoding": "base64",
  "content": "IyA9PSBTY2hlbWEgSW5mb3...",
  "content_sha256": "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
  "ref": "main",
  "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83",
  "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50",
  "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
  "execute_filemode": false
}

 

 

원격지 raw 파일 읽기

원격 저장소에 저장된 파일에 대한 정보가 아니라 파일의 내용을 읽고 싶을 때는 다음의 url로 요청할 수 있다. 원격지 파일에 대한 정보를 요청하는 url 맨 끝에 /raw만 추가하면 된다.

GET /projects/:id/repository/files/:file_path/raw

# 예시
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb/raw?ref=main"

 

테스트로 원격 저장소에 저장되어 있는 csv 파일 내용을 요청하면,

다음과 같이 웹에서 확인한 내용을 그대로 확인할 수 있다.

 

 

Python 코드 예시

Python으로 해당 작업을 수행할 때 참고하기 위한 코드를 적어둔다.

 

- 원격지 파일 정보 확인

import base64
import requests

token = 'GIT_TOKEN'
project_id = 26909238
file_path = 'csv/addresses.csv'

api_url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/files/{file_path.replace('/', '%2F')}?ref=main"
headers = {"PRIVATE-TOKEN": token}
response = requests.get(url=api_url, headers=headers).json()
print(response)

# 파일 내용 확인
print(base64.b64decode(response['content'].encode('ascii')).decode('utf-8'))

 

- 원격지 raw 파일 읽기

token = 'GIT_TOKEN'
project_id = 26909238
file_path = 'csv/addresses.csv'

api_url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/files/{file_path.replace('/', '%2F')}/raw?ref=main"
headers = {"PRIVATE-TOKEN": token}
response = requests.get(url=api_url, headers=headers).text
print(response)

 

 

참고 문서

https://docs.gitlab.com/ee/api/repository_files.html