development

git을 사용할 때 포크에서 개별 파일이나 디렉토리를 잠그는 방법이 있습니까?

big-blog 2020. 11. 18. 09:22
반응형

git을 사용할 때 포크에서 개별 파일이나 디렉토리를 잠그는 방법이 있습니까?


우리는 동일한 제품에 대해 작업하는 60 명 이상의 개발자로 구성된 팀이며 SVN에서 Git 및 GitHub로 이동하고 있습니다. SVN에는 개별 파일이 잠겨 있고 개발자가 코드를 커밋하려고 할 때마다 파일 소유자가 잠금을 해제해야하는 프로세스가 있습니다. 우리 중 세 명이 총 150 개 이상의 파일을 소유하고 있습니다. 잠금 해제는 코드 검토가 선행됩니다.

Github에서 우리는 Fork-Clone 모델을 사용할 계획입니다. 개발자 그룹이 작업중인 각 프로젝트는 포크를 수행하고, 각 개발자는 포크의 복제를 수행하고, 코드를 작성하고, 원본에 커밋합니다. 기능은 업스트림에 풀 요청을 수행합니다.

괜찮아 보이지만 문제는 큰 프로젝트가 전달 될 때 검토를 위해 많은 변경 사항을 가져와 파일 소유자의 부하를 증가 시킨다는 것입니다. 또한 이것은 개발의 후반부에 발생할 수 있으므로 프로젝트가 위험에 처할 수 있습니다.

우리가 작동 할 것이라고 생각한 한 가지 방법은 git push가 오리진 (포크)에 대해 수행 될 때 후크를 갖는 것입니다. 업스트림에 대한 최종 검토 git pull이 하나있을 수 있습니다.

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


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

나는 이것이 당신의 프로세스를 다시 생각하고 git의 강점과 git 위에 Subversion 워크 플로를 강제로 맞추는 것에 의존한다고 생각합니다. "포크 클론"모델도 다른 모양이 필요할 수 있습니다. 대부분의 모든 개발자는 자체 포크를 가지고 있으며 원하는 경우 원격을 통해 리포지토리를 팀간에 공유 할 수 있습니다. 그러나 같은 출처를 공유하는 기여자는 몇 가지 나쁜 습관을 만듭니다.

Gitflow 는 매우 인기있는 git 워크 플로이며 Github 자체에는 몇 가지 유용한 팁이 있으며 워크 플로를 공유합니다 .


파일을 병합 할 수없고 잠 가야하는 경우 GIT 대신 중앙 집중식 솔루션 (예 : SVN 또는 ClearCase)을 사용하십시오.


사용하는 경우 git LFS(GitHub와 같은 일부 git 호스팅 제공 업체에서 지원) 파일 잠금을 사용할 수 있습니다 .

파일을 편집하여 .gitattributes파일 유형을 잠금 가능으로 표시 하십시오.

*.docx lockable
# Make MS Word files lockable

다음으로 잠급니다.

$ git lfs lock example.docx

git lfs unlock example.docx을 추가하여 다른 사람 의 파일과 다른 사람 의 파일을 잠금 해제 할 수 있습니다 --force.


Git은 분산되어 있기 때문에 잠금 기능을 제공하지 않습니다. 그러나 GitLab Enterprise Edition Premium 에서 코드를 호스팅 하는 경우 웹 인터페이스를 사용하여 개별 파일 또는 폴더를 잠그고 원하는 작업을 정확하게 수행 할 수 있습니다.

다른 사람의 서버 (자신의 웹 사이트)에서 프로젝트를 호스팅하지 않으려면 GitLab을 다운로드하여 자신의 웹 서버에서 호스팅 할 수도 있습니다.


정확히 잠금은 아니지만 Github는 " 코드 소유자 " 라는 개념을 도입했습니다 . 코드 소유자가 검토 한 후에 만 ​​커밋을 허용하도록 코드베이스의 일부를 제한 할 수 있습니다.


이것은 가능하다. git-lfs 2.0에는 파일 잠금 기능이 도입되었습니다. https://github.com/git-lfs/git-lfs/wiki/File-Locking 링크를 참조 하십시오 . 이 기능에 대한 지원은 TFS 2017.2 ( https://docs.microsoft.com/en-us/vsts/release-notes/) 부터 사용할 수 있습니다 .


Git에서는 할 수있는 방법이 없습니다. 다른 사람들이 말했듯이 문서가 "병합 가능"한 경우 리베이스를 시도하여 작업 방식을 변경할 수 있습니다. 우리의 경우에는 규칙이 있습니다. 정말로 잠글 필요가 있다면 이름을 바꾸십시오. 그러나 우리는 사무실 문서 등에서 만 그런 일을합니다.
이 기여는 해결책을 제공하는 것이 아니라 해결 방법입니다 (하지만 stackoverflow는 이것을 주석으로 추가하는 것을 허용하지 않습니다.

참고 URL : https://stackoverflow.com/questions/13662255/is-there-a-way-to-lock-individual-files-or-directories-on-fork-when-using-git

반응형