我在运行测试一个CI方框,因为 修改的文件。为了加速这一过程,我只是在做一浅克隆: 的Git找到一个浅克隆
git clone --depth 1 [email protected]:JoshCheek/some_repo.git
假设所有的测试都通过了,我想触发在管道中的下一个步骤。触发什么是基于哪些文件在最近的和部署(参考d123456
)和我刚测试的urrent ref之间发生变化(参考文献c123456
)。如果我已经做了一个正常的克隆,我可以发现这样的:
git diff --name-only d123456 c123456
但是我的克隆很浅,所以它不知道那些提交。我发现我可以使用git fetch --depth=n
来获取更多的历史记录,但我只知道SHA,而不是SHA的深度。下面是一组的方式,可以大概回答这个问题:
# hypothetical remote diff
git diff --name-only origin/d123456 origin/c123456
# hypothetical ref based fetch
git fetch --shallow-through d123456
git diff --name-only d123456 c123456
# hypothetical way to find the depth I need
depth=`git remote depth-to d123456`
git fetch --depth "$depth"
git diff --name-only d123456 c123456
否则好像我可能会写一个循环,并保持调用--deepen
直到我的历史包含了承诺。这看起来很痛苦(意味着写/维护令人讨厌)和昂贵(意味着缓慢,记住浅克隆的目的是为了降低这个成本)。
哦,很好,我完全错过了!可悲的是,似乎Github不支持它,当我尝试它说'致命的:服务器不支持 - 浅 - 排除':( –
你可以进入最后一个笔记的更多细节?它不是我清楚什么参考克隆是(你是说一个完全克隆的回购缓存在CI服务器上?) –
是的:有了参考克隆,你运行'git clone --reference [options] ',Git调用另一个Git在URL像往常一样,但后来借用或复印件(请参阅'--dissociate')从参考克隆的对象,而不是整个网络。测量上一个真正的项目复制它们,我修剪克隆挂钟时间从近两年(这涉及到一些相当大的仓库) –
torek