2012-01-04 9 views
1

이 작업을 수행 할 수있는 복제 기능은 알고 있지만 repo에있는 항목을 복제하고 푸시 한 모든 항목을 알고 있습니다.이미 로컬 저장소에있는 로컬 파일에서 원격 저장소 만들기

우리가 필요로하는 것은 리포지토리 템플릿의 일부 파일을 수정하고 이러한 파일 (프로젝트마다 다름)을 템플릿에 커밋하지 않고 새 repo를 만들어 템플릿에 그대로 유지함으로써 그대로 유지됩니다.

그게 가능합니까? "git add", "git commit"및 "git push"를 원격 저장소가 될 추가 매개 변수와 함께 사용 하시겠습니까?

기본적으로, 나는 repo가 ​​아닌 파일을 원합니다.

+0

당신은'git remote add'를 사용할 수 있습니다, 그리고 나서 새로운 리모콘으로 밀어 넣을 수 있습니다. – Philippe

+0

그게 나쁜 생각은 아니지만 템플릿에서 파일을 수정하면 템플릿에서 파생 된 모든 프로젝트에 푸시 될 것이고 파손될 수 있습니다. – NaturalBornCamper

+0

새로운 저장소와 원본 저장소 간의 관계는 무엇입니까? 나는. 원래 저장소 (공유 파일)의 변경 사항이 새 저장소에 반영되어야합니까? 아니면 일회성 사본일까요? – Philippe

답변

2

기본 저장소 (main)와 상속하는 저장소 (child1, child2)를 고려하십시오. 내가 메인 저장소에 어린이 1 인 지점을 생성하는 것입니다 시작 할 것입니다 무엇 :

main$ git checkout -b child1 
... edit/commit for child1 ... 
main$ git checkout master 
main$ git checkout -b child2 
... edit/commit for child2 ... 

을 지금, 당신은 할 수 있습니다 :

main$ git push [email protected]:repositories/child1.git child1:master 
main$ git push [email protected]:repositories/child2.git child2:master 

이 저장소 자식 1의 마스터에 지점 자식 1을 푸시합니다. 이렇게하면 주인을 깨끗하게 유지할 수 있습니다. 이것이 푸시 오프 일 경우 나중에 분기를 제거 할 수 있습니다. 빨리 감기 할 수 없다면 하위 저장소에서 병합을 강제로 수행해야합니다 (see the refspec for the push).

+0

그럴 수도 있습니다. 시도해 보겠습니다. – NaturalBornCamper

+0

완벽하게 감사했습니다! 병합을 강제 할 필요가 없습니다! – NaturalBornCamper

0

가장 간단한 방법은 원격으로 푸시하기 전에 변경 사항을 적용 할 수있는 로컬 복제본을 사용하는 것입니다. 다음 작업을 수행 할 수 있습니다.

  1. 템플릿 저장소의 복사본을 만듭니다.

    git clone --no-hardlinks templaterepo newrepo

  2. 당신이 오래된 저장소에서 보관하지 않을 파일을 필터링 . 당신은 일반적으로 힘내에서와

    git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD

  3. cd newrepo는 다른 변화를 확인합니다.

    git commit ...

  4. git add ...

    는 원격를 추가합니다.

    git remote add origin [email protected]

  5. 이것은 당신이 당신이 실제로 신경 쓰지 모든 파일에 대한 역사를 보존 있는지 확인하고 사람에 대한 역사를 쓸어 것

    git push origin master

밀어 당신 걱정하지 마십시오 (민감한 데이터가 포함될 수 있음).

1 단계 이후.newrepo은 더 이상 templaterepo과 본질적으로 관계가 없습니다. 공유 내역이 아닙니다 (--no-hardlinks은 동일한 파일 시스템에서 복제한다고 가정하고 추가 속도만을위한 것임). 이후 templaterepo에서 무엇을 하든지간에 영향을 미치지 않습니다. newrepo (또는 리모컨의 내용).

자세한 내용은 git help filter-branch을 참조하십시오.