【问题标题】:Replacing remote git repo with local version having lost .git用丢失 .git 的本地版本替换远程 git repo
【发布时间】:2014-05-18 14:29:32
【问题描述】:

我正在使用新发布的Dropbox webhooks 设置我的 Pelican 博客的自动部署。每次我在 Dropbox 中更改文件时,它都会将 POSTs 发送到我的 Heroku 应用程序,该应用程序执行以下操作:

  1. 从 Dropbox 下载内容
  2. 在新内容上运行 pelican 以复制博客。输出到我的 Github Pages repo 的本地克隆。
    • 这将删除存储库中当前存在的所有内容,并将其替换为新生成的博客。 不幸的是,这也会删除 .git 目录。
  3. 我的.git/ 丢失了,所以我运行git init 并读取了遥控器。
  4. 我运行 git pull origin master 来同步它们。
  5. 使用git add -A .跟踪所有更改、新文件和删除。
  6. 提交、推送到 Github。

面临的问题是在第 4 步,当我运行 git pull 时,它会从 repo 中提取所有原始信息——包括我想要删除的文件。例如,如果我删除一个帖子,当我运行 pelican 时,它会从 repo 中正确删除,它会删除整个文件夹并在没有文件的情况下重新生成博客——但是当我运行 git pull 时,该文件会重新出现。我无法跟踪删除了哪些文件,因为当我运行 pelican 时删除了 .git/ 时,我丢失了我的 git 历史记录。

最后,我要做的就是运行pelican,替换 repo 的全部内容,然后添加所有更改/删除/添加,然后将 repo 推送到 Github。我永远不需要有关当前存储库中内容的信息,因此如果有帮助,运行git reset 对我来说不是问题。我该怎么做?

【问题讨论】:

  • 要减轻损坏,请尝试重新定位 .git:mv .git ../somewhere/outside; echo git: ../somewhere/outside >.git。这样,当pelican 开始变得粗心时,只需重做 echo 即可修复它。听起来真正的解决方案是让pelican 停止删除您不想删除的内容。
  • 同意,但我希望学习一种 git 方法。
  • 目标是创建文章帖子的易用性,因此我希望能够简单地将新的 Markdown 文件拖放到我的 Dropbox 中,例如 Scriptogr.am。使用git的原因很简单,就是博客托管在GitHub页面上,这就需要我使用git来推送最终的静态站点输出。我认为在这种情况下使用 dropbox + git 不会有问题,而且上面的问题确实与 dropbox 完全无关。
  • 听起来实际问题是“如何阻止 pelican 删除 .git 文件夹” - 问题中的其余信息并不那么相关。看起来是known "feature"
  • 这不是问题,我知道该怎么做——但它最终成为解决问题的最佳方法。

标签: git github webhooks pelican


【解决方案1】:

由于似乎无法在 git 中执行我尝试执行的操作,因此我最终将 pelican 的 DELETE_OUTPUT_DIRECTORY 设置为 False,然后作为我的 Fabric 脚本运行的一部分

rm -rf *

myself 相反,它忽略点前缀文件和目录,因此单独留下.git/。然后我可以重新生成新内容并将其添加到存储库、提交和推送,而不会出现问题。

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 2021-07-03
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2016-10-01
    • 2014-06-13
    • 2011-01-18
    • 2013-03-08
    相关资源
    最近更新 更多