문제

중 하나에 대한 반 년 동안,나는 유지되었다는 내 눈에 자식에서 지역 사회의 희망 스위치를 만들고 멀리에서 SVN.하나의 특별한 문제점을 잡고 나를 다시 무능력을 잠금 바이너리 파일이 있습니다.지난해에 나는 아직 개발에 이 문제를 해결합니다.내가 이해하는 파일 잠금에 대하여 간의 기본 원리 배포본을 제어하지만,어 웹 개발 회사는 이용할 수 있 git 을 추적하는 소스 코드 및 이미지 파일이 변경할 우려가 있는 경우에 잠재적인 위해 바이너리 파일을 충돌이 발생합니다.

을 달성하는 효과의 잠그고,""중앙 저장소를 식별되어야 합니다.에 관계 없이 배포되는 자연의 작업하는 대부분의 회사"는"중앙 저장소에 대한 소프트웨어 프로젝트입니다.우리는 할 수 있어야를 표시하는 파일을 요구하는 것으로서 관리 git 저장소에서 지정된 주소가 필요합니다.아마도 이것은 어렵기 때문에 git 트랙 파일 내용을 파일이 아닌?

당신의 경험을 다루기 힘내 및 바이너리 파일이 되어야 하는 잠길 수정 전?

참고:그것은 다음과 같 소스 장치의 새로운 오픈소스 분산 버전 관리 프로젝트,정확성,는 잠금 중 하나로 목표입니다.

도움이 되었습니까?

해결책

Git LFS 2.0 파일 잠금 지원을 추가했습니다.

GIT LFS 2.0.0을 사용하면 이제 활발하게 작업중인 파일을 잠그고 파일을 다시 잠금 해제 할 때까지 다른 사람들이 GIT LFS 서버로 밀지 못하게 할 수 있습니다.

이렇게하면 파일 시스템 수준에서 무수병 파일에 대한 작업 손실뿐만 아니라 병합 충돌과 손실 된 작업을 방지 할 수 있습니다. GIT의 분산 및 병렬 특성과 모순되는 것처럼 보이지만 파일 잠금은 많은 소프트웨어 개발 워크 플로우의 중요한 부분, 특히 이진 자산을 사용하는 대규모 팀의 중요한 부분입니다.

다른 팁

전복은 잠금,그들은 단지고 있다.그들은 강제 적용될 수 있습 사용 svn:needs-lock 특성(수행할 수 있고 의도적으로 깨 필요한 경우).그것은 올바른 솔루션을 위한 관리 비 mergeable 파일이 있습니다.내가 일하는 회사 위한 매장에 대해 단지에 모든 것을 파괴하고,사용 svn:needs-lock 에 대한 모든 비 mergeable 파일이 있습니다.

에 동의하지 않는"자물쇠는 통신 방법".그들은 훨씬 더 많은 효과적인 방법보다는 푸시 알림 등의 휴대 전화 또는 e-mail.Subversion 잠금 자기 문서화(는 잠금).다른 한편으로는 경우에,당신은 통신에 의해 다른 전통적인 푸시 알림 채널,전자 메일과 같은,당신은 누구를 보내 알림니까?당신이하지 않는 사전에 알고 있는 사람을 수 있습 편집하려는 파일에서 특히 오픈 소스 프로젝트지 않는 한,당신은 완전한 목록을 당신의 전체 개발팀입니다.그래서 그 전통적인 커뮤니케이션 방법은 없을 거의 효과적입니다.

중앙 잠금 server,는 동안에 대한 원칙의 DVC 이 가능한 방법을 위한 비 mergeable 파일이 있습니다.한 DVC 없 중앙 잠금 기능을,나는 생각한 것이지 내가 일하는 회사를 사용하여 파괴.

더 나은 솔루션을 병합하는 도구에 대한 모든 바이너리 파일 형식이지만,그의 장기적이고 지속적인 목표는 없을 것"완성".

여기에 흥미를 읽습니다.

이진 파일 잠금은 일부 환경에 필요한 기능이라는 데 동의합니다. 그래도 이것을 구현하는 방법에 대해 생각했습니다.

  • 파일을 "Need-Lock"으로 표시하는 방법이 있습니다 ( "SVN : Needs-Lock"속성과 같은).
  • 체크 아웃시 Git은 파일을 읽기 전용과 같은 표시합니다.
  • 새로운 명령 git-lock 잠금 권한을 요청하기 위해 어딘가에서 실행되는 중앙 잠금 서버에 문의합니다.
  • 잠금 서버가 권한을 부여하면 파일을 읽으십시오.
  • git-add 잠금 파일의 컨텐츠 해시를 잠금 서버에 알립니다.
  • 잠금 서버는 해당 해시가 마스터 저장소에 커밋에 나타나도록 지켜 봅니다.
  • 해시가 나타나면 잠금을 해제하십시오.

이것은 매우 반 구운 아이디어이며 모든 곳에 잠재적 인 구멍이 있습니다. 그것은 또한 git의 정신에 반대하지만, 어떤 상황에서는 확실히 유용 할 수 있습니다.

특정 조직 내에서 이러한 종류의 물건은 스크립트 포장지와 커밋 후크의 적절한 조합을 사용하여 구축 될 수 있습니다.

바이너리의 여러 곳에서 발생하는 변화에 대한 Mario의 추가 우려에 대한 응답으로. 따라서 시나리오는 Alice와 Bob이 동시에 동일한 이진 자원을 변경하고 있습니다. 그들은 각각 하나의 중앙 리모컨에서 클로닝 된 자신의 로컬 리포를 가지고 있습니다.

이것은 실제로 잠재적 인 문제입니다. 그래서 앨리스는 먼저 끝나고 중앙으로 밀어냅니다 alice/update 나뭇가지. 일반적으로 이런 일이 발생하면 Alice는 검토해야한다는 발표를 할 것입니다. 밥은 그것을보고 검토합니다. 그는 (1) 그 변화를 자신의 버전에 포함시킬 수 있습니다 ( alice/update 그분의 변화) 또는 (2) 자신의 변화를 bob/update. 다시, 그는 발표를한다.

이제 앨리스가 밀면 master 대신, 밥은 당기면 딜레마를 가지고 있습니다 master 그리고 그의 지역 지점에 합병하려고합니다. 그의 앨리스와의 충돌. 그러나 다시 한번, 동일한 절차가 다른 지점에만 적용될 수 있습니다. 그리고 밥이 모든 경고를 무시하고 앨리스를 넘어서도 항상 앨리스의 일을 해결하기 위해 꺼내는 것이 가능합니다. 이것은 단순히 의사 소통 문제가됩니다.

(AFAIK) 전복 자물쇠는 권고이기 때문에 이메일 또는 즉각적인 메시지가 동일한 목적으로 사용될 수 있습니다. 그러나 그렇게하지 않더라도 Git을 고칠 수 있습니다.

아니요, 잠금 메커니즘이 없습니다. 그러나 잠금 장치는 좋은 의사 소통을 대신하는 경향이 있습니다. 이것이 GIT 개발자가 잠금 메커니즘을 추가하지 않은 이유라고 생각합니다.

우리는 최근에 GIT를 사용하기 시작했으며 (이전에 사용 되었음) 자물쇠가 필요없이 문제에 도움이 될 수있는 워크 플로 변경을 발견했습니다. Git이 어떻게 설계되었는지와 가지가 얼마나 쉬운지를 활용합니다.

기본적으로, 그것은 비 마스터 브랜치로 밀고 해당 지점을 검토 한 다음 마스터 브랜치 (또는 대상 지점이있는 사람)로 병합하는 것입니다.

GIT가 "의도 된"방식으로, 각 개발자는 자신의 공개 저장소를 게시하여 다른 사람들이 가져 오라고 요청합니다. 전복 사용자가 문제가 있다는 것을 알았습니다. 대신, 우리는 중앙 저장소의 브랜치 트리를 밀고 각 사용자는 자신의 지점 트리를 가지고 있습니다. 예를 들어, 이와 같은 계층 구조가 효과가있을 수 있습니다.

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

자신의 구조를 자유롭게 사용하십시오. 나는 또한 또 다른 일반적인 git 관용구 인 주제 지점을 보여주고 있습니다.

그런 다음 사용자 A의 로컬 리포에서 :

feature1
feature2

중앙 서버 (Origin)로 가져 오려면 :

git push origin feature1:users/a/feature1

(이것은 구성 변경으로 단순화 될 수 있습니다)

어쨌든, Feaction1이 검토되면, 책임이있는 사람은 (이 경우 기능의 개발자이며, 마스터와 병합을 담당하는 단일 사용자를 가질 수 있음) 다음을 수행합니다.

git checkout master
git pull
git merge users/name/feature1
git push

풀은 가져 오기 (새로운 마스터 변경을 당기기 그리고 기능 분기) 및 업데이트는 중앙 저장소의 내용을 마스터합니다. 사용자 A가 작업을 수행하고 마스터를 제대로 추적하면 병합에 아무런 문제가 없어야합니다.

이 모든 것이 사용자 나 원격 팀이 이진 리소스를 변경하더라도 마스터 브랜치에 통합되기 전에 검토됩니다. 그리고 무언가가 마스터 브랜치에 들어가는시기에 대한 명확한 묘사 (프로세스 기준)가 있습니다.

당신은 또한 git 후크를 사용하여 이것의 측면을 프로그래밍 방식으로 시행 할 수 있지만, 다시 한번 이것들과 함께 일하지 않았으므로 말할 수는 없습니다.

을 사용했을 때 파괴,나는 종교적으로 설정 svn:needs-lock 시설 모두에서 바이너리고 심지어 하드 편집 텍스트 파일입니다.나 실제로 경험하는 모든 충돌이 발생합니다.

지금 작업하는지에 대해 걱정 같은 것들입니다.기억하십시오:잠금 장치에서 파괴되지 않은 실제로 필수 잠금,그들은 단지 커뮤니케이션 도구입니다.무엇을 생각:저는 필요하지 않 Subversion,의사 소통을 관리할 수 있으로 전자메일,전화하고 있습니다.

다른 것은 나를 대체하는 많은 이진 형식으로 일반 텍스트 형식입니다.내가 사용하여 플레이 또는 LaTΕΧ 대신 말씀,CSV 대신 Excel,ASCII-Art 대신 Visio,YAML 대신,데이터베이스의 SVG 대신 OO 그릴,abc 대신 MIDI 니다.

잠금 이미지가 실제로 필요한지 확인하기 위해 현재 워크 플로우를 검사하는 것이 좋습니다. 두 사람이 이미지를 독립적으로 편집하는 것은 비교적 드문 일이며 약간의 의사 소통은 먼 길을 갈 수 있습니다.

나는 GIT 토론 그룹 에서이 문제를 논의했으며 현재로서는 아니요 GIT 용 중앙 집중식 파일 잠금 방법에 동의합니다.

Tortoisegit은 사무실 문서에 대한 전체 GIT 워크 플로우를 지원합니다. 또한 OpenDocument 형식을 위해 OpenOffice에 위임하는 것도 작동합니다.

나는 파일 잠금이 그것을 git의 기능으로 만들기를 기대하지 않을 것입니다. 어떤 종류의 이진 파일에 주로 관심이 있습니까? 실제로 파일 잠금에 관심이 있거나 파일을 병합 할 수 없어서 충돌을 방지하는 데 관심이 있습니까?

나는 OpenOffice-documents를 GIT에서 통합하는 것에 대한 지원을하거나 심지어 구현하는 사람을 기억하는 것 같습니다.

CAD 파일은 어떻습니까? 파일을 잠겨 있지 않으면 읽기 전용으로 유지하기 위해 대부분의 CAD 프로그램은 모든 VC에 의해 새 파일로 간주되는 임의의 변화를 열 수 있습니다. 내 생각에, 잠금은 일부 부분 파일을 변경하려는 의도를 전달하기위한 이상적인 수단입니다. 또한 일부 소프트웨어가 처음부터 쓰기 액세스를 얻는 것을 방지합니다. 이를 통해 소프트웨어 나 최소한 모든 파일을 완전히 닫을 필요없이 로컬 파일의 업데이트가 가능합니다.

잠그고 싶은 파일과 함께 CC에 텍스트 파일을 넣은 다음 업데이트 후크가 거부하도록하십시오.

프로젝트를 재구성하면 자물쇠를 피하는 데 도움이 될 수 있지만 :

  • 팀은 다른 우선 순위 (위치, 고객, ...)에 의해 구성됩니다.
  • 도구는 다른 목표 (호환성, 가격, 대부분의 직원의 사용 편의성)에 의해 선택됩니다.
  • 동일한 작업을 수행 할 수있는 대체품이 없으므로 동일한 가격에 동일한 가격에 맞는 대체품이 없으므로 일부 도구 (따라서 이진 파일)를 피할 수 없습니다.

요청하기 위해, 회사 전체가 워크 플로를 재구성하고 바이너리를 생산하는 모든 도구를 대체 할 수 있고, 자물쇠가 없기 때문에 GIT와 함께 일할 수 있도록하기 위해 매우 비효율적으로 들릴 수 있습니다.

자물쇠는 git 철학에 맞지 않지만 (바이너리는 결코 만들어지지 않았다), 잠금 장치가 그러한 문제를 해결하는 가장 효율적인 방법 인 무시할 수없는 상황이 있습니다.

이것은 해결책이 아니라 잠금 메커니즘이 필요한 이유에 대한 의견입니다. 일부 필드에는 이진 전용 형식을 평평하게 미션 크리티컬로 사용하는 일부 도구가 있으며 "더 나은/다른 도구 사용"은 옵션이 아닙니다. 실행 가능한 대체 도구는 없습니다. 내가 익숙한 것은 ASCII 형식으로 동일한 정보를 저장하더라도 실제로 합병 후보가되지 않을 것입니다. 내가 들었던 한 가지 반대는 당신이 오프라인으로 일할 수 있기를 원한다는 것입니다. 내가 생각하고있는 특정 도구는 라이센스를 가져와야하기 때문에 어쨌든 오프라인으로 작동하지 않으므로 랩톱에 데이터가 있으면 어쨌든 기차에서 도구를 실행할 수있는 것과는 다릅니다. 즉, 연결이 느리면 GIT가 제공하는 것은 라이센스를 얻고 변경 사항을 가져올 수 있지만 다른 버전을 볼 수있는 빠른 로컬 사본이 있습니다. 그것은이 경우에도 DVC가 당신에게 제공하는 좋은 것입니다.

한 가지보기 요점은 GIT가 단순히 사용하는 도구가 아니라 관리하는 모든 텍스트 파일에 적합하며 다른 파일에 다른 버전 제어 도구가 필요하다는 것이 성가신 것입니다.

일종의 어드바이저리 잠금-비아 메일 접근 방식은 실제로 악취가납니다. 나는 그것을 보았고 "나는 편집하고있다"라는 "I 'm word ed ed goding"의 끝없는 전자 메일 스트림에 지쳤으며 그로 인해 변경 사항이 손실 된 것을 보았습니다. 내가 생각하고있는 특별한 경우는 작은 ASCII 파일의 컬렉션이 훨씬 더 좋았을 것이지만 그것은 따로 따로 사용하는 것입니다.

같은 문제에 대해 회사에서 GIT를 사용하겠다고 제안하지 않습니다. 우리는 모든 디자인에 EA를 사용하고 문서를 위해 Microsoft Word를 사용합니다. 특정 파일을 편집 할 수있는 사람을 미리 알지 못하므로 독점적 잠금이 유일한 옵션입니다.

GIT는 각 개발자가 코드 나 파일에 대한 책임이있는 비 팀 환경에서 매우 잘 작동합니다.이 경우 잠금에 대한 커뮤니케이션이 필요하지 않기 때문입니다.

조직에 팀 환경이 필요한 경우 (일반적으로 개발자를 직무 보안에서 제거 해야하는 경우) SVN을 사용하면 GIT가 아닙니다. SVN은 자물쇠에 대해 개발자 간의 소스 제어 및 통신을 모두 제공합니다.

GIT는 파일을 잠그라 명령을 제공하지 않지만 GIT 후크를 사용하여 해당 기능을 달성하는 방법에 자금을 지원합니다. 잠금 정보를 저장하려면 보조 서버가 필요합니다. 사전 커밋 후크를 사용하여 커밋 된 파일이 잠겨 있는지 확인할 수 있습니다. 그리고 누군가가 파일을 잠그는 경우 프로그램은 보조 서버에 사물함과 잠긴 파일의 정보를 알려야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top