2012-12-01 2 views
50

우리는 동일한 제품을 개발중인 60 명 이상의 개발자로 구성된 팀으로 SVN에서 Github로 옮겨 가고 있습니다. 우리는 SVN에서 개별 파일을 잠그고 개발자가 코드를 커밋하려고 할 때마다 파일 소유자가 잠금을 해제해야하는 프로세스가 있습니다. 우리 중 세 명이 총 150 개 이상의 파일 소유자입니다. 잠금 해제에는 코드 검토가 선행됩니다.github을 사용할 때 개별 파일이나 디렉토리를 포크에 잠글 수있는 방법이 있습니까?

Github에서 우리는 포크 복제 모델을 사용할 계획입니다. dev의 그룹이 작업하고있는 각 프로젝트는 포크를 수행 할 것입니다. 각 개발자는 포크 복제본을 작성하고 코드 &을 작성하고, 이 기능의 리드는 업스트림으로 끌어 오기 요청을 수행합니다.

큰 문제는 아니지만 큰 프로젝트가 전달되면 검토를 위해 변경 사항이 많이 생겨 파일 소유자의로드가 증가합니다. 또한, 이것은 개발의 후기 사이클에서 발생할 수 있으므로 프로젝트가 위험해질 수 있습니다.

우리가 생각할 수있는 한 가지 방법은 git 푸시가 시작될 때 (fork) 후크를 사용하는 것입니다. 업스트림에 최종 리뷰가있을 수 있습니다.

그러나 github 확장 또는 푸시 후크를 찾을 수 없습니다. Github를 사용하여이 작업을 수행하는 빠른 방법 (기존 확장 읽기)이 있습니까? 아니면 git에서 사용할 동일한 후크를 사용해야합니까?

+5

파일 잠금이 힘내라는 느낌이 들지 않습니다. (대부분 SVN에서 짜증납니다.) 대부분의 경우, 나는 확실히 요청을 받고 브랜칭이 당신을 위해가는 길이다. 하위 모듈을 사용하여 프로젝트의 다른 부분을 다른 repo에서 분리 할 수도 있습니다. 그러면 팀간에 훨씬 더 분리 된 분리 (파일 보호)가됩니다. 그래서 파일 소유자는 메인 서브 모듈 소유자가 될 것이고, 그는 자신의 팀이 자신의 메인 브랜치에서 만든 모든 풀 요구를 수정할 것입니다. 그런 다음 모든 사용자는 자신의 포크가 있습니다. –

+0

http://programmers.stackexchange.com/questions/184435/workflow-using-binary-document-formats-in-git-without-locks-moving-from-subver – Steen

+2

@SimonBoudrias 당신의 아이디어는 완벽하게 작동하지 않습니다. git 병합 도구가없는 모든 문서 유형에 사용됩니다 (거의 항상 그렇습니다). TortiseSVN/WebSVN을 사용하면 MS Exchange를 피할 수는 없지만 git에서는 할 수 없습니다. 내 생각에, 그것은 자식의 매우 불행한 fallback입니다. – peterh

답변

-2

이 사용 사례는 Git이 SVN보다 훨씬 뛰어난 이유 중 하나입니다. ->rebase! 좋은 git 워크 플로우를 따르는 경우 풀 요청을 제출하기 전에 업스트림에서 리베이스하십시오. 파일 잠금 및 다른 사람의 커밋 및 덤프 충돌에 대해 걱정할 필요가 없습니다. 리베이스는 작업을 따로 설정하고 원격 커밋을 적용한 다음 작업을 맨 위에 적용합니다.

나는 이것이 git의 강점과 git 위에 Subversion 워크 플로우를 적용하는 것에 의존하여 프로세스에서 다시 생각해보아야한다고 생각한다. "포크 복제"모델은 또 다른 모습을 필요로 할 수도 있습니다. 대부분의 개발자는 자신 만의 포크를 가지고 있습니다. 원하는 경우 팀 간 원격을 통해 리포지토리를 공유 할 수 있습니다. 그러나 동일한 기원을 공유하는 공헌자들은 나쁜 습관을 조성합니다.

Gitflow은 매우 인기있는 git 워크 플로이며 Github themselves has some nice tips and shares their workflow입니다.

+78

병합 가능한 파일이있는 한 작동합니다. 바이너리 파일 (예 : Word 문서)이 있으면 붙어 있습니다. – schoetbi

+8

Git은 svn보다 훨씬 좋으며 그 반대도 마찬가지입니다. Git은 바이너리가 아닌 파일을 사용하는 개발자에게 적합합니다. 바이너리에 대한 우리 회사의 경우 우리는 git보다 큰 바이너리 파일 (20mb + 100+ 버전)을 처리하기 때문에 svn을 선택했습니다. (우리가 테스트 한 시나리오에서) ps : i love git, –

+1

위의 schoetbi에서 벗어난, 그러나 이것을 비 - 바이너리 상황으로 확대 : iOS 용으로 개발하고 스토리 보드를 사용하는 경우 병합/리베이스를 실행할 수 없습니다. 따라서 기본적으로 동일한 스토리 보드에서 2 명의 개발자가 작업 할 수 없습니다. – Fraggle

70

파일을 병합 할 수없고 잠글 필요가없는 경우 GIT 대신 중앙 집중식 솔루션, 즉 SVN 또는 ClearCase를 사용하십시오.

+4

이것은 정답입니다. 지금이 순간에 받아 들여진 사람이 아닙니다. Upvoted. 잠금을 위해 필요한 바이너리 파일 일 필요조차 없습니다. 예를 들어 다른 질문에 대한 iOS 스토리 보드에 댓글을 남깁니다. – Harindaka

+0

iOS 스토리 보드? "다른 질문? 링크 해 주시겠습니까? –

+0

@Harindaka는 "다른 질문"이 아니라 "다른 대답"을 의미한다고 생각합니다. 언급되는 댓글은 다음과 같습니다. http://stackoverflow.com/questions/13662255/is-there-a-way-to-lock-individual-files-or-directories-on-fork-when-using-github#comment41679865_14864163 –

0

힘내에서 할 수있는 방법이 없습니다. 다른 사람들이 말했듯이, 문서가 "합병 가능한"것이라면, 당신이 행동하는 방식을 바꾸어 리베이스를 시도 할 수 있습니다. 우리의 경우, 우리는 규칙을 가지고 있습니다 : 당신이 정말로 그것을 잠글 필요가 있다면 그것을 바꿉니다. 그러나 우리는 등, 오피스 문서에이 constribution 해결책을 제공하지 않습니다
을 같은 일을, 그것을 해결 트릭이다 (그러나 나 주석으로이 추가 유래 할 수 없습니다.

1

git LFS (GitHub와 같은 일부 git 호스팅 제공 업체에서 지원) File Locking을 사용할 수 있습니다.

마크 파일이 .gitattributes 파일을 편집하여 같은 잠금 입력 :

*.docx lockable 
# Make MS Word files lockable 

을 그리고로 잠급니다 : 당신은 git lfs unlock example.docx 사용하여 파일의 잠금을 해제 할 수 있습니다

$ git lfs lock example.docx 

--force를 추가하여 다른 사람의 그 .