我正在编写一个python脚本,以使我的点文件与GitHub上的存储库保持最新。它将点文件复制到一个单独的目录(~/dotfiles
)中,这样我的主目录就不是git repo了。在复制文件之前,它会执行filecmp.cmp( fileInLocalRepo,fileInHomeDir )
,查看文件自上次复制到本地repo以来是否发生了更改。所有文件更新后,如果有任何更改,更改后的文件将推送到GitHub。
这很好,直到我开始从多台计算机更新点文件,然后旧文件可能会覆盖我的远程文件。如果我先将文件下拉到本地dotfiles
repo,filecmp.cmp()
仍然会说文件不同,脚本会用本地文件覆盖下拉的文件,然后推送,因为它认为有更改。
有什么方法可以让我弄清楚哪个文件实际上是新的吗?我知道git不会在文件属性中保留更新时间,所以我不能使用它。如何将文件从GiHut下拉到本地repo(~/dotfiles
),然后将它们与主目录中的相同点文件进行比较,以查看每个文件中的哪一个实际更新?
假设你正在设置的所有计算机都有准确的时间,你可以让它为每个点文件创建一个时间戳文件,其中只包含点文件的本地修改时间。然后您可以将本地时间戳与远程时间戳进行比较。
您也可以只在本地执行提交,然后尝试与远程分支合并。如果合并成功,那么假设它是可以的。如果合并失败,那么文件的同一部分有两个不同的更改,需要解决冲突,在这种情况下,你会以某种方式通知自己。
一个可能更简单、更不容易出错的解决方案(因为它更手动)是将您的点文件符号链接到git中的点文件。然后,当您编辑一个点文件时,git文件会被更新,您可以手动提交并轻松地推送更改。