2017-11-24 19 views
2

내가 실수로 필요한 것보다 더 높은 위치에 내 .git 폴더를 넣어 :GIT : 하위 폴더 내에서 git 폴더를 이동하고 기록을 다시 쓰는 방법으로 항상 그런 것처럼 보입니까?

Folder1/ 
    .git <-- currently here 
    myproject/ 
     .git <--- should be here 

내가 myproject 내부로 이동하고 싶지만 내가 거기부터 앙시 커밋을 볼 때 이전 버전과의 호환성을 깰 것 ..

일관되게 유지할 수있는 방법이 있습니까? 어쩌면 역사를 다시 써서/항상 그런 것처럼 보이겠습니까? 나는 그것이 git filter-branch --tree-filter와 함께 할 수 있었다라고 생각한다. 그러나 어떻게 확실하지 않은가? 당신이 myproject 폴더에 .git 폴더를 이동하기 때문에

+0

"이전 버전과의 호환성 저하"란 무엇을 의미합니까? git repo에서'Folder1' 안에'myproject' 폴더 안에있는 파일을 커밋 했습니까? –

+1

이렇게하려면 필터 분기 자체가 필요하지 않습니다. 'myproject' 폴더의 현재 내용을 현재'myproject'와 같은 레벨로 옮긴 다음 빈'myproject' 폴더를 삭제하십시오. 그런데 왜 이걸하고 싶니? –

+1

[히스토리 다시 쓰기] (https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History)의 'Creating a a Subdirectory New Root'가 나타나면 시작될 수 있습니다. 'git filter-branch'는 '핵 옵션'으로 간주되므로 완벽하게 작동하려면 약간의 노력이 필요합니다. – Shammoo

답변

-1

가, 자식이 원래 상대 경로의에서 파일을 감지하지만, 새로운 상대 경로에 존재하는 파일을 찾을 수 없기 때문에 git status는 삭제 된 원본 파일을보고하고 새로운 파일이됩니다.

.git 폴더를 이동하기 전에 git repo에 myproject 폴더 아래의 git 트랙 파일을 root/myproject/*과 같이 저장하는 등. .git 폴더를 이동 한 후 myproject 폴더 아래의 파일은 git repo 루트 아래에 있습니다 (root/*). 따라서 git은 새로운 파일 (untracked)임을 감지하고 root/myproject/*에있는 파일이 더 이상 존재하지 않는 (삭제 된) 것으로 생각합니다.

git repo는 사용자가 직접 사용하기 때문에 변경 사항 디렉토리를 커밋 할 수 있습니다. .git 폴더가 Folder1에있을 때 원본 커밋 기록을 제거하려면 git rebase -i을 사용하여 커밋을 삭제할 수 있습니다. 당신이 myproject 폴더 아래에있는 파일에 대한 역사를 커밋 유지하려면

, 당신은 .git 폴더를 이동하지 않아야하지만, 외부 myproject 폴더 동안 Folder1 아래에있는 파일과 폴더를 이동 .

+0

내 downvote 아니지만 설명이 도움이 될 것입니다. –

+0

@TimBiegeleisen 제안을 주셔서 감사합니다. –