2013-09-29 3 views
0

나는 내 손안에 특이한 상황이 있습니다. git_test라는 git repo가 ​​있다고 가정 해 보겠습니다. 이 3 가지가 있습니다특정 git 브랜치에서 디렉토리 제거하기

  1. 마스터
  2. BRANCH1
  3. 브랜치

을 그리고 2 개 폴더 (DIR1, DIR2) 및 README 파일이 있습니다.

이제 master 분기에는 README 파일 만 있습니다. branch1에 dir1이 있습니다. 그러나 branch2를 생성하고 체크 아웃 할 때 dir1과 dir2가 모두 있습니다. (나는이 시간까지 원격 저장소로 지점을 밀었습니다)

이제 내 질문에는 두 부분이 있습니다.

  1. branch2에서 dir1을 어떻게 제거합니까? (즉, branchN은 repo의 다른 디렉토리가 아닌 dirN 만 갖기를 원합니다.)

  2. 미래에 분기 생성 자체를 피할 수있는 방법이 있습니까? 나는 특정 지점에 포함 할 이사 (Y /들) (선택?

TIA

+0

제가 아는 한 망할 놈의 디렉터리 파일을 추적하지 않습니다? 어쩌면 당신이 그것의 내용을 삭제하면 디렉토리가 사라질 것입니다. – Croo

+0

하지만 그 디렉토리가 저장소에서 벗어나길 원치 않습니다. 나는 현재 디렉토리에서 그 디렉토리를 멀리하고 싶다.서로 다른 지점에서 다른 지점을 유지하는 것 –

+1

근본적으로 잘못된 것을하고있는 것일 수 있습니다. 다른 지점에 다른 디렉토리를 유지해야하는 이유는 무엇입니까? 그 디렉토리의 내용은 무엇입니까? – robert

답변

0

나는 두 가지 master와 역사를 공유하고 있다고 가정하고있어 여기 실수는 당신이 branch1git checkout -b branch2 동안 계속 한 것을이었다. 그렇지 않은 경우 다른 방법으로 수정해야합니다.

그래서 master에 모두 branch1branch2 주 역사, 당신은 수행하여 branch2를 해결할 수 주어진 :이 branch2에 소개 된 커밋을하고는 master에서 파생 있도록 그들을 리베이스됩니다

$ git checkout branch2 
$ git rebase --onto master branch1 branch2 

. 즉,이 git rebasebranch1에 소개 된 커밋 을 삭제하지만 master에는 없으며 은 branch2에 도입 된 커밋 만 남겨 둡니다.

질문의 두 번째 부분은 아니요, Git에게 디렉토리를 유지하도록 지시 할 방법이 없습니다. Git은 트리의 커밋 및 스냅 샷을 처리하며, git branch은 단순히 " 커밋을 기반으로 새 분기 시작"이라고 말합니다. 역사는 완전히 분리 될 운명 경우, 당신은 고아 분기를 만들 수 있습니다 - A는 부모 나 와 커밋해야합니다 지점을 커밋 :

$ git checkout --orphan NAME 

이 새로운 지점을 만들 것입니다, 전 - 현재 트리로 채워집니다. 다음 git rm -rf <path>으로 원하지 않는 디렉토리를 제거하도록 선택할 수 있습니다. 또는 은 git rm -rf .으로 모든 것을 완전히 제거합니다.

이렇게해도 몇 가지 결과가 있습니다. 분기가 서로 연결이 끊어지면 Git에서 데이터의 일부가 어떻게 인식되는지, 데이터를 현명하게 병합하는 방법을 알지 못하기 때문에 많은 충돌이 발생할 수 있습니다. 에 다른 쪽을 병합하지 않으려면 (예 : gh-pages 가지 GitHub에 있음) 계속 유지할 수 있습니다.

여기에 몇 가지 제안을 더하겠습니다. 첫 번째는 이러한 이 정말로 완전히 별개의 기록으로 별도의 분기가되어야한다고 가정하면 아마 별개의 저장소에 보관해야 할 것입니다. 당신은, 즉

$ git checkout -b NAME master 

: - 당신이 지점에 있다면

또한, branch10 말을 - 그리고 master을 기반으로 새 지점 을 만들려면, 당신은 쉽게 그렇게 할 수 시작 지점으로 사용할 커밋 또는 분기를 선택할 수 있습니다.

마지막으로, 다른 브랜치에 디렉토리를 유지하려는 이유가 명확하지 않으므로 한 걸음 뒤로 물러서서 을 수행하려고하는지 확인해보십시오. 힘내 (Git)에서는 가능한 많은 것들이 있지만 그 강도에 반하는 방법론 을 선택하면 도구를 사용하기가 훨씬 어려워지고 저장소를 공유하기가 더 어려워 질 수 있습니다.

+1

성취하려는 것이 무엇인가에 대한 질문은 오히려 간단합니다. 나는 단지 가능하고 불가능한 것을 이해하기 위해 노력하고있다. git add에서 디렉토리를 선택적으로 추가하는 것보다 쉬운 방법이 있다면 말이다. 그리고 예, 여기에있는 목적은 동일한 저장소 아래에있는 지점의 연습 코드와 기본 애플리케이션 코드를 구별하는 것입니다. –

+0

@glnarayanan 멋지 네요! 확실히 실험. 개발 워크 플로우에서,'master' 또는 다른 통합 브랜치 (어떤 사람들은'develop'라는 것을 사용하는 사람들)로부터 topic 브렌치를 생성하기를 원할 것입니다. 'git co -b BRANCH_NAME STARTING_POINT' 양식은 현재 다른 지점에 있더라도 정확한 위치에서 분기를 시작할 수 있기 때문에 아주 좋습니다. – jszakmeister

+0

많은 도움이되었습니다. 여기에 도와 주셔서 고마워요 :) –

0

추측에서 (나는 당신이 우리에게 충분한 정보를 준 확실하지 않다), branch2을 경우 그런 경우 masterbranch2을 근거로하여 다음 당신이 원하는 것을 달성 할 수있는,

master-->branch1-->branch2 

:. 다음은 즉 않습니다 어떤 branch1 포함 branch1을 기반으로, 당신은이 상황이있을 수 있습니다 (

git rebase --onto master branch1 

이 이후 branch1에서 branch2의 비트를 차단 : 대신에, 위에서 설명한 상황에서 즉

 -->branch1 
master-| 
     -->branch2 

, 당신은 branch2 체크 아웃 한 후 실행하여 다른 사람을 변경할 수 있습니다 독점)을 붙여 넣은 다음 master 상단에 붙여 넣습니다.

왜 이렇게하고 싶은지 잘 모르겠지만 작동 할 것입니다. 나중에 master (예 : README)의 공통 항목을 변경하는 경우 master에 모든 지점을 리베이스하면됩니다.

+0

지금 사용해보세요! –

관련 문제