移动 git 存储库上下文的最佳方法是什么?

What is the best way to move the context of a git repo?

我目前有一个发布到 GitHub 页面的 Jekyll 博客的 git 存储库。当我最初设置它时,我在博客目录的根目录下初始化了 git。这意味着我要提交并推送所有 Jekyll 源文件,而不仅仅是静态呈现的内容。基本上,我想从

$~/writing/_site/

作为根,而不是我目前从中推送的内容

$~/writing/

我想开始向远程仓库推送 只是 静态内容,将所有源文件仅留在我的本地机器上。我考虑过创建一个本地分支机构并进行更改,但我认为这无法实现我的结果。并不是我在改变内容本身,而是推送一个子目录而不是父目录。

我想我可以发布

$ git push --force

从父目录,然后在子目录中初始化一个 repo,并从 推送,但这似乎是一种粗鲁的无知。

我可以git-push --force,将 Jekyll 源代码复制到另一个未跟踪的目录,然后创建一个分支,并将 git-rm 所有源代码和 git-mv 子目录中的内容放入父目录,但这也感觉像用一块面包画油画。

假设您希望继续对您网站的源代码进行版本控制,以执行您想要的操作,您将需要两个完全独立的 Git 存储库。一个存放源代码,另一个存放 Jekyll 生成的静态内容在 _site 文件夹中。

  • repoA - 完整的 Jekyll 源代码
  • repoB - 只是静态内容

工作流程是这样的:

  1. 更改 repoA(例如写一个新的 post)
  2. 提交对 repo 的更改A
  3. 运行 jekyll 建立您的网站(生成 _site
  4. (可选)将更改推送到某处,通常是私有的
  5. 删除存储库中的所有文件和文件夹B
  6. 将所有内容从 repoA\_site 移动到 repoB\
  7. 提交对 repo 的更改B
  8. 将 repoB 中的更改推送到 GitHub 页面

您可能希望将步骤 58 自动化,因为它们很无聊且重复。为此,您可以使用无数工具,例如 Rake, Gulp, Grunt

如果你使用 Rake,你可能还想看看 jekyll-rakefile

不要将其他站点设为 git 存储库,也不要使用 git 传输静态内容。正如 torek 的评论所述,git 传达所有已签入的内容(并且仅传达已签入的内容)。相反,在构建之后,您应该使用另一个工具,例如 scprsync 来传输内容。