GitHub을 미러로 설정
배경.
나의 공통된 취미는 가능한 한 많은 나의 데이터를 가지고 있다는 것이다. 이것은 어느 정도에 우리가 알고 좋아하는 많은 서비스를 가지고 있다는 것을 의미한다.이것은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
,newRevision
와ref
이다.따라서 이러한 지식과 이미 제공된 예시 스크립트가 있으면 우리는 다음과 같은 수신 후 스크립트를 만들 수 있다.
#!/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
이름으로 명명하는 것을 확인하십시오. 이것은 당신이 해야 할 모든 일입니다. 개인 환매 협의에 제출할 때마다 이 파일을 실행하기 위한 것입니다.
Reference
이 문제에 관하여(GitHub을 미러로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kbuzby/setting-up-github-as-mirror-19i6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)