2013-05-09 3 views
4

Я унаследовал проект XCode, который использует код из проекта CocoaAsyncSocket (доступен в GitHub). Файлы (AsyncSocket.m/h) были скопированы в проект XCode, поэтому у меня нет истории git.Можете ли вы определить версию git файла, скопированного из репо?

Мне нужно найти, какую версию файлов у меня есть. Есть ли способ сравнить мои файлы (при условии, что они не были отредактированы) с историей репо, чтобы узнать, какая у меня фиксация?

+0

мерзавец вините файл и спросите Дев ПВН это? – Doon

ответ

4

Сначала вычислите хэш вашего файла, используя git hash-object.
Затем вы можете использовать git ls-tree, чтобы перечислить хеши каждого рассматриваемого коммита.

Я хотел бы использовать что-то вроде этого:

file=AsyncSocket.m 
hash=$(git hash-object $file) 
for i in $(git rev-list HEAD -- $file); do 
    git ls-tree $i|grep -q $hash && echo $i 
done|xargs -l git log -1 --oneline --decorate 
+0

Вот и все! Такая удивительность. – dejuknow

2

Не простой способ, о котором я знаю, особенно если конкретная версия этого файла отображается в нескольких версиях общего проекта (т. Е. Этот файл не изменялся между версиями).

Чтобы получить хэш для этого файла, вы можете git hash-object -t blob AsyncSocket.h, а затем использовать git ls-tree -r <some_version_tag>^{tree} | grep <hash> для разных тегов версий, чтобы выяснить, какие версии включены в этот файл. Конечно, если он был изменен в любом случае, так как он был «импортирован», это не сработает, если вы не сможете получить оригинальную копию ...

Смежные вопросы