Pull requests와 Discussions
Pull requests와 Discussions
허브의 Pull requests와 Discussions를 사용하면 사용자가 저장소에 커뮤니티 기여를 할 수 있어요. Pull requests와 discussions는 모든 저장소 유형에서 동일하게 동작해요.
출처: 문서
본문
크게 보면 목표는 다른 git 호스트(GitHub 같은)의 PR과 Issue의 더 단순한 버전을 만드는 것이에요:
- 포크(fork)가 관여하지 않아요: 기여자는 원본 저장소의 특수
ref브랜치로 직접 푸시해요. - discussions와 PR을 엄격히 구분하지 않아요: 본질적으로 같으므로 같은 목록에 표시돼요.
- 임의의 저장소가 아니라 ML(즉 모델/데이터셋/Spaces 저장소)에 맞게 간소화되었어요.
참고: Pull Requests와 discussions는 저장소 설정에서 활성화/비활성화할 수 있어요.
목록 (List)
아무 저장소의 커뮤니티 탭에 가면 모든 Discussions와 Pull requests를 볼 수 있어요. 열려 있는 것만 필터링해 볼 수도 있어요.
보기 (View)
Discussion 페이지에서는 여러 사용자의 댓글을 볼 수 있어요. Pull Request라면 Files changed 탭으로 모든 변경 사항을 볼 수 있어요.
Discussion / Pull request 제목 편집하기
내가 PR이나 discussion을 열었거나, 저장소 작성자이거나, 쓰기 접근 권한이 있다면 연필 버튼을 클릭해 discussion 제목을 편집할 수 있어요.
Discussion / Pull Request 고정하기 (Pin)
저장소에 쓰기 접근 권한이 있다면 discussions와 Pull Requests를 고정할 수 있어요. 고정된 discussion은 모든 discussions의 맨 위에 나타나요.
Discussion / Pull Request 잠그기 (Lock)
저장소에 쓰기 접근 권한이 있다면 discussions나 Pull Requests를 잠글 수 있어요. 일단 잠기면 이전 댓글은 여전히 보이지만 사용자는 새 댓글을 추가할 수 없어요.
댓글 편집과 중재
댓글을 작성했거나 저장소에 쓰기 접근 권한이 있다면, 댓글 상자의 오른쪽 위 컨텍스트 메뉴에서 댓글 내용을 편집할 수 있어요.
댓글을 편집하면 댓글 위에 새 링크가 나타나요. 이 링크는 편집 히스토리를 보여줘요.
댓글을 숨길 수도 있어요. 댓글을 숨기는 것은 되돌릴 수 없으며, 아무도 그 내용을 보거나 편집할 수 없게 돼요.
악성 댓글을 신고하는 방법은 moderation을 함께 읽어 보세요.
댓글과 discussion에서 Markdown과 LaTeX를 사용할 수 있나요?
네! 댓글에 서식을 추가하려면 Markdown을 사용할 수 있어요. 또한 수학 조판을 위해 LaTeX를 사용할 수 있으며, 수식은 Markdown으로 파싱되기 전에 KaTeX로 렌더링돼요.
LaTeX 수식에는 다음 구분자를 사용해야 해요:
- 표시 모드용
$$ ... $$ - 인라인 모드용
\\(...\\\\)(슬래시와 괄호 사이에 공백 없음)
Pull requests를 로컬에서 관리하는 방법
내 PR 번호가 42라고 가정할게요.
git fetch origin refs/pr/42:pr/42
git checkout pr/42
# Do your changes
git add .
git commit -m "Add your change"
git push origin pr/42:refs/pr/42
초안 모드 (Draft mode)
"Advanced mode"에서 처음부터 새 Pull request를 열면 초안(draft) 모드가 기본 상태예요. 이 상태에서 다른 기여자는 내 Pull request가 작업 중이며 병합할 수 없음을 알 수 있어요. 브랜치가 준비되면 "Publish" 버튼을 눌러 Pull request 상태를 "Open"으로 바꾸면 돼요. 게시한 뒤에는 초안 모드로 돌아갈 수 없다는 점을 참고하세요.
Pull request ref 삭제하기
Pull request가 닫히거나 병합되면, 그와 연결된 git ref(PR 커밋을 저장하는 브랜치)를 삭제해 저장 공간을 확보할 수 있어요.
PR을 닫거나 병합한 뒤에는 discussion 하단에 ref를 삭제하면 확보할 수 있는 예상 저장 공간을 보여주는 알림이 나타나요. "Delete ref" 버튼을 클릭하면 PR의 git ref를 영구적으로 제거하고 저장 공간을 되찾을 수 있어요.
[!TIP] 메인 브랜치가 스쿼시되고 나중에 파일이 제거된 경우 특히 유용해요. 그 파일들은 PR 자체가 추가한 것이 아니더라도 PR 브랜치 히스토리에 남아 있어, 해제할 수 있는 저장 공간을 차지하게 돼요.
[!WARNING] PR ref 삭제는 되돌릴 수 없어요. 삭제하면 더 이상 PR 커밋을 로컬에서 fetch하거나 checkout할 수 없어요.
Pull requests 고급 사용
git 저장소에서 변경 사항은 어디에 저장되나요?
우리의 Pull requests는 포크와 브랜치를 사용하지 않고, 원본 저장소에 직접 저장되는 refs라는 커스텀 "브랜치"를 사용해요.
Git References는 이미 태그와 브랜치를 저장하는 git의 내부 메커니즘이에요.
브랜치 대신 커스텀 ref(예: refs/pr/42)를 사용하는 장점은 저장소를 클론하는 사람들(저장소 "소유자" 포함)이 기본적으로 fetch하지 않지만, 필요할 때 온디맨드로 fetch할 수 있다는 점이에요.
모든 Pull requests fetch하기: git 마법사용 🧙♀️
로컬 refspec을 조정해 모든 Pull requests를 fetch할 수 있어요:
- Fetch
git fetch origin refs/pr/*:refs/remotes/origin/pr/*
- ref를 추적하는 로컬 브랜치 생성
git checkout pr/{PR_NUMBER}
# for example: git checkout pr/42
- 로컬에서 변경했다면 PR ref로 푸시하려면:
git push origin pr/{PR_NUMBER}:refs/pr/{PR_NUMBER}
# for example: git push origin pr/42:refs/pr/42
더 알아보기 (Learn more)
- 저장소 설정에서 discussions/PR을 비활성화하는 법을 확인하세요.
- github의 Git 브랜치 문서에서 git 워크플로의 기본을 배울 수 있어요.