【问题标题】:How do I push to a new GitHub repo without including history?如何在不包含历史记录的情况下推送到新的 GitHub 存储库?
【发布时间】:2018-12-18 20:41:27
【问题描述】:

我在本地做一个项目已经有一段时间了,终于到了我想把它上传到 GitHub 来分享的时候。该项目的早期版本包含硬编码的数据库密码,但我希望避免将其放在 GitHub 上。

有没有办法让我将 repo 的“浅”版本——只是现在的文件,没有历史记录——推送到 GitHub?像git clone --depth 1 这样的东西会很好,除了看起来你不能从本地主机“推送克隆”到 GitHub,而且 GitHub 似乎没有让我以正常方式“拉克隆”的界面。

我花了几个小时在网络上搜索“git push to github without history”、“git push to github as shallow clone”、“git push clone to github”等,但没有任何结果我可以破译与我的问题相关的内容。 GitHub docs 警告不要提交密码和东西,但他们给出的唯一建议是删除文件,而不是历史记录。同样,我在 Stack Overflow 上能找到的最接近的问题是 this question,其答案也集中在删除文件上。我不希望这样:我想保留文件,我只想删除它们曾经包含硬编码密码的历史记录。

理想情况下,我可以将项目从本地主机“浅推”到 GitHub,丢失以前的历史记录,但从那时起跟踪历史记录。这可能吗?

【问题讨论】:

  • git repos 固有地包含历史。唯一的方法是使用git rebase 重写历史记录。
  • 您想在本地保存历史记录吗?您总是可以将所有内容压缩到一个提交中并使用它。
  • @Mobius 是的,我想在本地保存历史记录。

标签: git github


【解决方案1】:

没有所谓的“浅推”。有浅层克隆,你可以做一个浅层克隆然后推送到它,但你不能让GitHub本身host成为一个浅层克隆。如果你可以让 GitHub 托管一个浅克隆,看起来你可以用这种方式做你想做的事:我在自己的服务器上做了一个,并做了一些似乎可行的简单实验(但我不是很彻底)。

我还测试了尝试从浅克隆推送到新的空 GitHub 存储库。那被拒绝了:

 ! [remote rejected] master -> master (shallow update not allowed)

因此,如果您想使用 GitHub,则必须创建一个新的(独立的)存储库。此新存储库与您现有的存储库不兼容。

【讨论】:

    【解决方案2】:

    您可以做的一件事是将目录复制到一个新文件夹并删除您的.git 目录。然后你可以初始化存储库,就好像它是新鲜的一样:

    git init
    git add .
    git commit -m "Genesis."
    git remote add origin <remote repository URL>
    git push -u origin master
    

    这样,如果您发现需要查找某些内容,您可以将历史记录保存在另一个目录中。

    【讨论】:

    • 在这种情况下,我可以将原始本地存储库中的差异推送到 GitHub 存储库吗?
    • 在这种情况下,您将失去任何与旧的交互的能力。但是,如果需要,您应该能够创建 patch。
    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2023-03-31
    • 2013-07-02
    相关资源
    最近更新 更多