나는 임의의 파일 foo
을 가지고 있는데, 자식에게 커밋되지 않았습니다.파일이 git의 기록에서와 동일한 지 확인하는 방법
전체 기록이 자식 (bar
)으로 유지 된 파일도 있습니다.
foo
이 존재하는 bar
의 모든 버전과 동일한 지 어떻게 확인할 수 있습니까? md5sum
, git log
및 grep
의 조합을 사용
나는 임의의 파일 foo
을 가지고 있는데, 자식에게 커밋되지 않았습니다.파일이 git의 기록에서와 동일한 지 확인하는 방법
전체 기록이 자식 (bar
)으로 유지 된 파일도 있습니다.
foo
이 존재하는 bar
의 모든 버전과 동일한 지 어떻게 확인할 수 있습니까? md5sum
, git log
및 grep
의 조합을 사용
foo
파일의 md5sum grep을 foo
가 덩어리로 REPO에 표시해서,
file=foo # or argument to script, etc
sha1=$(git hash-object -t blob $file)
repotype=$(git cat-file -t $sha1 2>/dev/null) || {
echo "file \"$file\" is not in the repo"
exit 1
}
[ $repotype = blob ] || {
echo "uh oh: file \"$file\" matches non-file ($repotype) object"
exit 1
}
를 단을, bar
이라는 이름으로 나타나지는 않습니다 (또는 전혀 아닐 수도 있습니다. git add
에 있었지만 아직 커밋되지 않았을 수 있습니다). 그래서 지금 모든보고가 아니라 거기 경우 커밋 건너 뛰는, 대상 경로를 블롭-ID를 추출, 커밋 (합리적인?) : 당신이 에서 어떤 이름을 찾으려면 오히려
target_path=bar
git rev-list --branches | # or --all, or HEAD, or (etc)
while read id; do
file_id=$(git rev-parse -q --verify $id:$target_path) || continue
[ $file_id = $sha1 ] || continue
echo "found \"$file\" as \"$target_path\" in $id"
# do more here if you like, e.g., git show $id
done
일부 특정 명시 적 이름보다 git ls-tree -r
을 각각 모두 blob
을 찾고 ID를 확인할 수 있습니다.
:
일 것입니다 : 모든 bar
파일을 커밋의
for SHA in `git log --pretty=format:"%h" bar`; do
git show $SHA:bar | md5sum
done | grep `md5sum foo| cut -d' ' -f1`
위의 명령 git log --pretty=format:"%h" bar
이 목록을 우리가 보여 그들의 각 하나 (git show
에 md5sum이 작업을 수행 그 커밋의 파일). 끝에서 우리가 파일 foo
의 내용이 어딘가에 REPO에 나타나면에게 쉽게
아름다운 (주 단편을 제외하고 검증되지 않은, 그리고 가끔 비트가 오타 또는 바보 오류 조심, 다시 입력하거나 길을 따라 변경되었을 수 있습니다), 오른쪽 상자 밖으로했다. – Patrick