이미 이동 한 파일을 제외한 모든 파일이 하위 디렉토리에 있도록 기록을 다시 작성하려면 어떻게해야합니까?
아래에 프로젝트가 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에게 감사드립니다 .
'programing' 카테고리의 다른 글
스크롤바없이 뷰포트 너비 (vw)를 계산할 수 있습니까? (0) | 2021.01.15 |
---|---|
google ()과 maven의 차이점 {url 'https://maven.google.com'} (0) | 2021.01.15 |
왜 어떤 사람들은 이동 할당에 스왑을 사용합니까? (0) | 2021.01.14 |
jQuery를 사용하여 매개 변수가있는 URL 구성 (0) | 2021.01.14 |
데이터베이스 'master'에서 CREATE DATABASE 권한이 거부되었습니다 (EF 코드 우선). (0) | 2021.01.14 |