我在 GitHub 上有一个私人存储库,我想将其公开。但是,一些初始提交包含我不想公开的信息(硬编码凭据等)。
在不包含部分或全部提交历史记录的情况下公开最新提交(我真的不需要或不希望公共存储库中以前的提交)的最简单方法是什么?
您可以在克隆时限制历史记录的深度:
--depth <depth>
Create a shallow clone with a history truncated to the specified
number of revisions.
如果您想要有限的历史记录,但仍然需要一些,请使用此功能。
使用以下命令:
git clone --depth <depth> -b <branch> <repo_url>
地点:
depth
是您要包含的提交数量。即,如果您只想要最新的提交,请使用 git clone --depth 1
branch
是您要从中克隆的远程分支的名称。即,如果您想要 master
分支的最后 3 次提交,请使用 git clone --depth 3 -b master
repo_url
是您的存储库的网址删除
.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
git clone --depth 1
来保留最后一次提交(包括提交消息)。
如果您想更改最后的提交消息(来自克隆的分支),您可以在克隆后使用以下命令:git commit --amend -m "UPDATED MESSAGE HERE"
。
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
但是,如果我是你,我真的会避免执行最后一步,因为这会给当前使用该存储库的其他每个人带来问题。相反,只需切换到使用这个新分支(也许有一个更好的名称)并且不要公开旧分支。