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