2017-05-09 11 views
1

현재 몇 년 동안 존재하는 현재 개인용 GitHub 저장소가 있습니다. README.md 파일에는 더 이상 정확하지 않은 라이센스가 있습니다.이전 Git 커밋에서 라이센스 수정

이제 고정 라이센스와 함께이 개인 레포를 공개로 바꾸고 싶습니다. 어쨌든 모든 오래된 커밋에는 여전히 오래된 (잘못된) 라이센스가 포함되어 있습니다.

어떻게 해결할 수 있습니까? 내 첫 번째 아이디어는 squash the repository to a single commit and destroy everything else 이었지만 어쩌면 내가 원하는 것을 성취 할 수있는 더 좋은 방법이있을 것입니다.

다른 질문에서 알 수 있듯이 기록을 유지하는 것은 중요하지 않지만 OTOH도 마찬가지입니다.

실제로 실제로 잘못된 점은 잘못된 라이센스로 커밋 된 것입니다.

아이디어가 있으십니까?

추신 : 나는 커밋의 ID를 아는 사람이 아니더라도 이전 커밋을 얻을 수 없도록하고 싶습니다. 따라서이 솔루션은 GitHub와 같은 원격 저장소를 업데이트하는데도주의를 기울여야합니다.

+2

'git filter-branch'를 사용하면이 작업을 수행 할 수 있지만 그 시점에서 사용권이 변경된 기록을 반영해서는 안됩니까? 아니면 소급하여 프로젝트 전체를 변경하고 있습니까? –

+0

전 프로젝트에 대해 적극적으로 변경하고 있습니다 (예전 소스에만 적용되는 경우에도) 이전 라이센스와 함께 공개적으로 사용할 수 있기를 원치 않습니다. 나는 물건을 공개하기 전에 모든 것에 대한 새로운 면허를 원합니다. –

+0

@NoufalIbrahim'git filter-branch'는 히스토리에있는 파일을 편집 할 수있게합니까? 대신 파일을 삭제하는 것이라고 생각했습니다. 최선의 방법은 커밋을 스쿼시하고 다시 시작하는 것입니다. – Tom

답변

3

filter-branch을 사용하면이 작업을 수행 할 수 있습니다. 먼저 주어진 커밋에 대한 트리를 재 작성하는 작은 스크립트를 작성하십시오. 예 : 다음은 파일에있는 경우에만 something에서 something else으로 변경되는 것입니다.

if [ -f README.md ]; then 
    sed 's/something/something else/g' README.md > tmp 
    mv tmp README.md 
fi  
change.sh

저장이 다음 실행

git filter-branch --tree-filter "/bin/bash $(pwd)/change.sh" HEAD 

이 머리에서 돌아가는 모든 커밋을 다시 작성합니다 다음. 실수 한 경우 git reset을 사용하여 이전 트리로 돌아가 다시 시도 할 수 있습니다.