GitHub을 미러로 설정

5978 단어 tutorialgithubgit

배경.
나의 공통된 취미는 가능한 한 많은 나의 데이터를 가지고 있다는 것이다. 이것은 어느 정도에 우리가 알고 좋아하는 많은 서비스를 가지고 있다는 것을 의미한다.이것은git에 관한 것이거나 간단하게 말하면 내 개인 프로젝트의 원본 코드 제어이다.
소스 코드는 내가 공공 분야나 다른 사람의 서버에서 자주 겪지 않는 문제이다. (절대로 소스 오픈을 겨냥한 것이 아니다.) 그러나 여러 해 동안 나는 나의 GitHub 프로필에 이런 소규모 프로젝트 리콜 프로토콜이 가득 차 있는 것을 보았다. 이런 프로토콜은 몇 번 제출된 후에 언급된 적이 없다.그래서 이 점을 더욱 깔끔하게 하기 위해 저는 로컬 Synology NAS 장치에서 자신의git repo를 유지했습니다.
그럼에도 불구하고 로컬 NAS에서git를 사용하면 이렇게 많은 일을 할 수 밖에 없습니다. 만약 CI/CD와 같은 일을 더 많이 하고 싶다면, 당신은 자신의 서비스를 내놓거나 더 많은 서비스를 설정할 것입니다.
내가 원하는 기능 중 하나는 my website의 자동 배치이다. 나는 간단한 bash 스크립트를 한동안 실행했고 심지어 두 번째 서버까지 언급했다. 그러나 이것은 내가 유지하고 싶은 범위를 넘어섰다. 내가 두 번째 서버를 휴면시키기 시작한 후에 그것은 무거워졌다.제가 진짜 원하는 건 GitHub actions 같은 거예요.
미러가 생성됩니다.

GitHub을 미러로 설정
GitHub 렌즈를 설정하는 첫 번째 단계는 환매 프로토콜을 정상적으로 만드는 것입니다. 그러나 빈/비어 있는지 확인하십시오. 그렇지 않으면 약간의 --force 꽉 차야만 정상적으로 작동할 수 있습니다.
간단한 선택은 작업 복사본에 두 번째 리모컨을 설치해서 거기에 제출할 수 있도록 하는 것이다. 그러나 리모컨을 설치할 때마다 리모컨을 설치하고 거기에 제출을 추가할 의사가 있다는 것을 기억해야 한다.
이것은 거울이 동기화되지 않도록 하는 믿을 만한 방법이다.
따라서, 우리는 사유 원격 환매를 직접 거울에 제출하기를 바란다.private remote repo에서 작업 복사본과 같은 명령을 사용하여 GitHub repo를 원격으로 추가합니다. github-mirror 이 원격 URL을 표시하기 위해 선택한 이름입니다.
git add remote github-mirror <github git URL>

너의 약속을 거울로 삼다
일반적으로 미러는 모든 분기, 태그 등 저장소의 전체 클론입니다. 클론/푸시--mirror 옵션을 사용하여 수행됩니다.이 플래그는 클론 저장소를 표준 작업 복사본이 아닌 원격 저장소의 미러로 생성/업데이트합니다.GitHub에는 some official mirrors가 있지만 이 문제를 처리할 수 있는 내장된 지원이 없습니다.
GitHub이 완전한 거울이 되기를 원한다면push 명령에서 --mirror 로고를 사용하십시오. 예를 들어
git push --mirror github-mirror
이렇게 하면 원격 재구매한 모든 분기를 미러로 푸시되므로, 나처럼 주 분기만 제한하려는 경우 특정 참조를 푸시할 수 있습니다.
원격 디바이스의 한 분기에서 두 번째 원격 디바이스의 다른 분기로 커밋하는 명령은 다음과 같습니다.
git push github-mirror main:refs/heads/main
이 명령을 분석하면 앞의 두 부분git push이 있는데 이것은 원격 서버로 전송하는 표준 명령이다.
세 번째는 github-mirror입니다. 이것은 위에서 만든 리모컨의 이름입니다.원격 설정이 없으면 URL로 사용할 수도 있습니다.
네 번째 블록main:refs/heads/main은 사실상 둘로 합쳐져 사칭으로 구분된다.
앞부분은 우리가 제출하고 있는 로컬 지점의 이름이나git 용어로'원본'이다.
두 번째 부분은 목적지입니다. 생략하면git는 같은 이름의 지점을 사용하려고 시도합니다.만약 하나가 존재하지 않는다면 그것은 창조될 것이다.
지정refs/*시작항은 우리가 특별히 특정 유형의 대상을 원격의 특정 위치로 보내려고 시도하는 것을 의미한다. 이를 refs/heads/*까지 확장하는 것은 제출 대상만 보내려고 하는 것을 의미한다. 이것은 GitHub를 이용한 간단한 이미지이기 때문이다.
마지막으로 전문refs/heads/main은 본 지주 서버에서 업데이트되는 정확한 위치를 지정했습니다.
만약 당신이 목적지를 명칭 공간이 아니라 지정했다면git는 가장 좋은 위치를 찾으려고 시도할 것이다. refs/heads 상태일 가능성이 높지만, 이러한 상황에서 특정성은 좋을 수 있다. 왜냐하면 우리는 자동 거울의 방향을 향해 전진하고 있기 때문이다.
참고: 이것은 단일 분기에서만 전송됩니다. 태그가 필요한 경우 --tags 옵션을 사용하여 모든 태그를 로컬 태그에서 원격으로 전송해야 합니다.
대부분의git 명령과 마찬가지로, 많은 다른 로고/옵션/파라미터가 git push 에 전달될 수 있습니다.만약 이것이 당신의 요구를 완전히 만족시킬 수 없다면 반드시 가서 보아야 한다the documentation

미러에 자동 커밋
현재, 우리는 개인 환매로 전송될 때 자동으로 이미지를 업데이트할 수 있는 명령을 실행할 것이다.
첫 번째 단계는 원격 서버에서 SSH keys set up for GitHub repo 를 받았는지 확인하는 것입니다. 이렇게 하면 상호작용 인증이 필요 없는 상황에서 전송할 수 있습니다.
그 다음으로 우리는 서버 측git hooks을 사용하여 새로운 제출을 받을 때 이 동작을 실행할 것이다. 특히post-receive-hook 제출을 성공적으로 받으면 실행할 것이다.
그다지 상세하지 않은 상황에서 갈고리는 본질적으로 명명 스크립트로 리포의 .git/hooks 디렉터리에 놓여 있고 정의된 시간에 실행됩니다.
git repos에 모든 갈고리의 예가 있습니다. 삭제 .example 접두사는 git가 그것을 실행할 수 있도록 합니다.
현재, 우리는 셸 스크립트를 만들어서 전송을 실행하고 실행할 준비가 되어 있습니다. github-mirror나는 단지 하나의 지점만 밀고 있기 때문에, 나는 단지 같은 지점에서 제출을 받을 때 거울로 밀고 싶을 뿐이다.이것은git를 실행할 때 스크립트에 전달되는 매개 변수를 통해 완성된 것입니다.
이 매개 변수의 순서는 oldRevision,newRevisionref이다.
따라서 이러한 지식과 이미 제공된 예시 스크립트가 있으면 우리는 다음과 같은 수신 후 스크립트를 만들 수 있다.
#!/bin/sh

while read oldrev newrev ref
do
if [[ $ref =~ .*/main$ ]]; # when committing to main branch
    then
        echo "Main ref received. Mirroring to GitHub"
        git push github-mirror main:refs/heads/main
    else
        echo "Ref $ref successfully received. Doing nothing: only the main branch may be deployed on this server."
fi
done
주의: 이 스크립트의 출력과 실행 중인 모든 내용이 개인 환매로 전송될 때 로컬 단말기에 출력되고 갈고리가 실행 중임을 알 수 있도록 응답하는 것이 좋습니다.
이 파일을 저장하고 post-receive 이름으로 명명하는 것을 확인하십시오. 이것은 당신이 해야 할 모든 일입니다. 개인 환매 협의에 제출할 때마다 이 파일을 실행하기 위한 것입니다.

좋은 웹페이지 즐겨찾기