我正在与该国另一方的另一位开发人员合作,他们是我们项目的负责人,并且没有使用正式的版本控制系统.在我的结尾,我正在跟踪git中的所有代码.我最近开始为主项目做贡献,并希望能够跟踪其他开发人员的更新.
当我收到他更新的代码时,通常采用zip文件的形式.如果我只是将文件解压缩到我的git工作文件夹中,git认为每个文件都已更改,大概是因为统计信息已更改.
我希望看到的是一种方法,我可以将新代码与我的工作副本一起解压缩,并仅合并更改.最好的方法是什么?由于它是Powerbuilder项目,因此大多数文件都是二进制文件.
谢谢!
如果存储在Git中,二进制文件必然会创建一个新版本(即在下一次提交时要考虑).
所以:你需要那些二进制文件,还是可以重建它们?
至于消息来源,在Git中,SHA1是王者,而且因为文件的日期(时间戳)涉及其计算,因为外部文件集的内容可能相当不同(更多文件,临时文件,应该忽略的文件,......),最好:
在单独的目录中解压缩
使用像WinMerge这样的工具来检测基于内容的更改,合并它们,然后只提交实际演变的文件.
您只需比较两组目录和文件:您解压缩远程同事开发的目录和文件,以及您当前正在工作的目录和文件.
感谢rq指出时间戳不是SHA1计算的一部分.只有:
类型
尺寸
blob的内容
是SHA1计算的一部分:
(来源:alexgirard.com)
但是,当将外部管理的大量文件导入到git存储库时,您可能会冒险将新文件添加到git管理的目录中,更改其内容,从而更改其SHA1密钥,即使旧的git管理文件未更改.
这意味着如果这些新文件只是临时文件或应该忽略/重新创建/重新生成的文件,那么树中的很多更改都是人为的.
(来源:alexgirard.com)
上面的过程只是确保一种外部方法来检测外部文件集和git管理的文件集之间的变化,并判断它是否必须是git工作目录的一部分.