复制没有历史记录的 git 存储库

问题描述 投票:0回答:8

我在 GitHub 上有一个私人存储库,我想将其公开。但是,一些初始提交包含我不想公开的信息(硬编码凭据等)。

在不包含部分或全部提交历史记录的情况下公开最新提交(我真的不需要或不希望公共存储库中以前的提交)的最简单方法是什么?

git github git-fork
8个回答
558
投票

您可以在克隆时限制历史记录的深度

--depth <depth>
Create a shallow clone with a history truncated to the specified 
number of revisions.

如果您想要有限的历史记录,但仍然需要一些,请使用此功能。


499
投票

使用以下命令:

git clone --depth <depth> -b <branch> <repo_url>

地点:

  • depth
    是您要包含的提交数量。即,如果您只想要最新的提交,请使用
    git clone --depth 1
  • branch
    是您要从中克隆的远程分支的名称。即,如果您想要
    master
    分支的最后 3 次提交,请使用
    git clone --depth 3 -b master
  • repo_url
    是您的存储库的网址

86
投票

删除

.git
文件夹可能是最简单的路径,因为您不想要/不需要历史记录(正如 Stephan 所说)。 因此您可以

从最新的提交创建一个新的存储库:

如何在没有整个历史记录的情况下克隆种子/启动项目? git clone <git_url>

然后删除
.git

,然后运行


git init

或者如果您想
重用当前的存储库:

使当前提交成为 Git 存储库中唯一(初始)提交? 然后按照上述步骤操作:

git add . git commit -m "Initial commit"

推送到您的存储库。

git remote add origin <github-uri> git push -u --force origin master



7
投票


6
投票


2
投票
git clone --depth 1

来保留最后一次提交(包括提交消息)。

如果您想更改最后的提交消息(来自克隆的分支),您可以在克隆后使用以下命令:

git commit --amend -m "UPDATED MESSAGE HERE"

    


1
投票


1
投票
git rebase -i

来删除它们。但当这些文件被频繁触及时,情况可能会变得复杂。另外,使用

git-rebase
很难删除初始提交,因此如果您的初始提交包含您想要删除的内容,那么事情会变得更困难。
但无论如何,上面将整个存储库折叠到一次提交中的所有答案似乎都过于复杂,并且涉及大量中间目录也会相当慢,并且可能会破坏存储在

.git

中的所有其他配置。

一种更快的方法是创建一个与现有提交完全匹配的孤立提交,例如:

$ TREE=`git cat-file -p master |sed '1,/^$/s/^tree //p;d;'` $ COMMIT=`echo Truncated tree | git commit-tree $TREE` $ git branch truncated-master $COMMIT

根据需要替换 
master

truncated-master
,并根据需要更改提交消息。如果您真的很勇敢,请继续:
$ git branch backup-master-just-in-case-i-regret-it-later master
$ git push -f origin truncated-master:master

但是,如果我是你,我真的会避免执行最后一步,因为这会给当前使用该存储库的其他每个人带来问题。相反,只需切换到使用这个新分支(也许有一个更好的名称)并且不要公开旧分支。

© www.soinside.com 2019 - 2024. All rights reserved.