- 主题:如何在git仓库中找到一份代码的commit ID?
git rev-list --all | xargs git grep <expression>
【 在 spadger 的大作中提到: 】
: 比如有一份代码,没有了版本信息,删掉了.git目录。知道它来自于某个巨大的git仓库,如何确定这份代码在git仓库中的commit ID?如果仓库是线性历史的话,二分法很容易找到,然而仓库经过很多人长时间分支提交合并早都不是线性历史了。
: #发自zSMTH@Note 8 Pro暖手宝
--
修改:lvsoft FROM 114.222.221.*
FROM 114.222.221.*
git grep是在提交的版本的内容中grep。
你在代码里找一段比较有区分度的贴进去。
【 在 spadger 的大作中提到: 】
: 这份代码是没有版本信息的,也不知道它的commit id是什么,所以列出仓库中所有com
: mit id以后并不知道要grep什么。
:
--
FROM 114.222.221.*
什么意思?
就是说你有个文件,要找到哪个历史版本中跟它完全一样是么?
那岂不是穷举下就行了。
git show $rev:$filename
$filename就是你这个文件的文件名
$rev是版本,可以用
git log --pretty=format:"%h" $filename
得到你这个文件名的所有有变化的版本id
找出来之后跑个md5sum,跟你现在的版本对比下就行。
如果是多了个空格之类的,那跑个diff,找出差异最小的也一样。
【 在 spadger 的大作中提到: 】
: 这个区分度真不好找,因为代码是个相当庞大的目录树。
: 主要还是多次分支合并造成的历史不线性,否则二分法很容易找到。
:
--
修改:lvsoft FROM 114.222.221.*
FROM 114.222.221.*
这个简单啊,你先git clone最新的openocd,
然后把你这个fork的版本覆盖过去,
然后git diff扫一眼各文件的改动情况。
这里有些部分是厂商为了实现自己芯片驱动改动的,有些部分是openocd自身版本更替改动的。
从里面找个比较像是自身版本更替改动的文件,然后用我上一贴的办法找出对应的版本号。
再git reset --hard,git checkout [那个版本号]
再把你这个fork的版本覆盖过去,再来一轮git diff。
大概率就已经找对了。如果还没找对再来一轮应该就差不多了。
【 在 spadger 的大作中提到: 】
: 某厂家fork的OpenOCD代码,实现了他们芯片的驱动,还没有开源。我偶然得到了一份,
: 当然是没有log信息的。我想知道他们是从OpenOCD哪个版本fork的,当然最简单的方法
: 是直接问问他们。
: ...................
--
FROM 114.222.221.*
spadger你可能不熟,他就是资深爱好者,而且他本人也是经常贡献代码反哺上游的。
我估计他大概率就是自己用了某款国产芯片,遇到问题然后想修bug。
硬件行业跟软件区别很大的,开源共享的精神和实践都比较匮乏。
别说软件开源了,有些是连卖给你的芯片的手册都不一定愿意给你,都要签NDA才给的。
把开源整成闭源也是常规操作,有些所谓的开源,通常就是把.git/目录打个zip包往百度网盘里一扔就叫开源了...
然后现在很多国产芯片的软件配套就这样,本身硬件软件可能都有小bug,但原厂也不一定管。
spadger作为爱好者给原厂提要求人家一般是不搭理的,人家公开信息的渠道也很有限。
我估计他大概率是从原厂论坛里别的爱好者以及原厂客服提供的各种碎片信息拼凑出来的“开源”代码。
最后谁也靠不住,可不就是只能自己折腾嘛。
这种事情真的是太正常了,其实真正有恶意的不多,更多的是业务不精/缺乏人手懒得管...
【 在 DoorWay 的大作中提到: 】
: 这不就是把开源那啥(抄or fork)成了闭源吗?
: 这个芯片厂美其名曰fork的人,肯定是架构师之类的头衔啊。
: 只不过你不是他们厂的人,不是修改bug,而是要“学习研究”。
: ...................
--
修改:lvsoft FROM 114.222.221.*
FROM 114.222.221.*
没事,一回生二回熟。
spadger他发的这个帖子我也能嗅到一丝丝恶意的味道。
他心里肯定是想说svn更好~
【 在 DoorWay 的大作中提到: 】
: 惭愧,你的回复让我明白,我的发言其实有恶意。
: 我太爱开玩笑了,水平又半瓶子晃荡。对硬件知道不多。
: 可能老看这个版面,无意识地的当成了都是老几位(老帮菜)的熟人模式。啥都说。
--
修改:lvsoft FROM 114.222.221.*
FROM 114.222.221.*