programing

이미 이동 한 파일을 제외한 모든 파일이 하위 디렉토리에 있도록 기록을 다시 작성하려면 어떻게해야합니까?

itsource 2021. 1. 14. 08:18
반응형

이미 이동 한 파일을 제외한 모든 파일이 하위 디렉토리에 있도록 기록을 다시 작성하려면 어떻게해야합니까?


아래에 프로젝트가 git있습니다. 어느 날 모든 프로젝트 파일을 현재 디렉토리 foo/bar/에서 프로젝트 아래 로 옮겼습니다 . 나는 git mv. 그런 다음 파일을 더 추가하고 기존 파일을 약간 변경했습니다.

결과적으로 이제의 기록을 보면 foo/bar/file.c파일을 이동 한 후 변경 한 내용 만 볼 수 있습니다.

이 문제를 다양한 방법 ( filter-branch하위 디렉터리 필터 등) 으로 수정하려고 했지만 도움이되지 않았으므로 여기에 꽤 쌓여 있습니다. 도움을 주시면 감사하겠습니다. 감사!


이동 된 파일로 기록을 다시 작성하려면 :

모든 파일이 항상 디렉토리에있는 것처럼 프로젝트의 이력을 보려면 foo/bar약간의 수술을해야합니다. git filter-branch"트리 필터"와 함께 사용 하여 커밋을 다시 작성하면 어디에도 foo/bar존재하지 않고 생성되고 모든 파일이 이동됩니다.

git filter-branch --prune-empty --tree-filter '
if [ ! -e foo/bar ]; then
    mkdir -p foo/bar
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files foo/bar
fi'

이제 모든 파일이 항상 에있는 것처럼 기록이 기록됩니다 foo/bar.

이동 된 파일의 기록을 보려면 :

이전에 이동되었거나 이름이 변경된 파일의 기록 만 보려면 다음 --follow옵션을 사용하십시오 git log.

git log --follow foo/bar/file.c

여기에 내가 한 일에 대한 간략한 요약이 있습니다. 나를 위해 일한 명령은 다음과 같습니다.

if [ ! -e foo/bar ]; then mkdir -p foo/bar; git ls-tree --name-only $GIT_COMMIT | grep -v ^foo$ | xargs -I files mv files foo/bar || echo ""; fi

마지막에 추가 한 echo 명령은 mv가 실패하더라도 전체 명령이 계속 실행되도록합니다. foo / bar / foo의 내용은 이동하지 않았지만 나는 그것으로 살 수 있습니다.

도움을 주신 Dan Molding (!!!)과 Jefromi에게 감사드립니다 .

참조 URL : https://stackoverflow.com/questions/4042816/how-can-i-rewrite-history-so-that-all-files-except-the-ones-i-already-moved-ar

반응형