Github에서 tarball을 다운로드하는 방법

Github에서 tarball을 다운로드하는 방법

나는 이것을 가지고있다:

curl -L "https://github.com/cmtr/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"

github에서 tarball을 다운로드하여 기존 디렉토리에 추출하고 싶습니다. 문제는 다음 오류가 발생한다는 것입니다.

Step 10/13 : RUN curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"
 ---> Running in a883449de956
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     9  100     9    0     0     35      0 --:--:-- --:--:-- --:--:--    35
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
The command '/bin/sh -c curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"' returned a non-zero code: 2

왜 tar 아카이브가 아닌지 아는 사람이 있습니까? 브라우저에서 github.com으로 이동하여 다음 패턴을 입력하면 tar.gz 아카이브가 다운로드됩니다.

https://github.com/<org>/<repo>/tarball/<sha>

왜 작동하지 않는지 잘 모르겠습니다.

답변1

따라서 자격 증명을 원하는 Github로 귀결됩니다. 2단계 인증이 없는 경우 컬을 사용하여 다음을 수행할 수 있습니다.

curl -u username:password https://github.com/<org>/<repo>/tarball/<sha>

하지만 2단계 인증 설정이 있는 경우 Github 액세스 토큰을 사용해야 하며 다음과 같이 github.com 대신 api.github.com을 사용해야 합니다.

 curl -L "https://api.github.com/repos/<org>/<repo>/tarball/$commit_sha?access_token=$github_token" | tar -xz -C "$extract_dir/"

액세스 토큰의 내용은 여기에 설명되어 있습니다. https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line

답변2

또 다른 방법은 GitHub 쿠키를 사용하는 것입니다. 여전히 일반 사용자/비밀번호로 시작되지만 최초 요청 이후에는 쿠키를 활용하여 추가 요청을 할 수 있습니다. 다음은 PHP의 예입니다.

<?php

# GET
$get = curl_init('https://github.com/login');
curl_setopt($get, CURLOPT_COOKIEJAR, 'github.txt');
curl_setopt($get, CURLOPT_RETURNTRANSFER, true);
$log = curl_exec($get);
curl_close($get);

# POST
preg_match('/name="authenticity_token" value="([^"]*)"/', $log, $auth);
$pf['authenticity_token'] = $auth[1];
$pf['login'] = getenv('USER');
$pf['password'] = getenv('PASS');
$post = curl_init('https://github.com/session');
curl_setopt($post, CURLOPT_COOKIEFILE, 'github.txt');
curl_setopt($post, CURLOPT_POSTFIELDS, $pf);
curl_exec($post);

-b github.txt그런 다음 와 함께 쉘 cURL을 사용 하거나 와 함께 PHP cURL을 사용할 수 있습니다 CURLOPT_COOKIEFILE github.txt. 위와 같은지 확인하세요 curl_close. 그렇지 않으면 쿠키 파일이 필요한 후에 생성됩니다.

관련 정보