我在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
git clone --depth 3 -b master
repo_url
#!/bin/bash set -e # Settings user=xxx pass=xxx dir=xxx repo_src=xxx repo_trg=xxx src_branch=xxx repo_base_url=https://$user:$pass@bitbucket.org/$user repo_src_url=$repo_base_url/$repo_src.git repo_trg_url=$repo_base_url/$repo_trg.git echo "Clone Source..." git clone --depth 1 -b $src_branch $repo_src_url $dir echo "CD" cd ./$dir echo "Remove GIT" rm -rf .git echo "Init GIT" git init git add . git commit -m "Initial Commit" git remote add origin $repo_trg_url echo "Push..." git push -u origin master
删除.git文件夹是可能最简单的路径,因为你不想要/不需要历史(如Stephan所说)。
.git
所以你可以从你最近的提交创建一个新的repo: (如何克隆种子/启动项目没有整个历史?) < / p >
git clone <git_url>
然后删除.git,然后运行
git init
或者如果你想重用你当前的回购: 使当前提交成为Git存储库中唯一的(初始)提交? < / p >
按照以上步骤进行:
git add . git commit -m "Initial commit"
推到你的回购。
git remote add origin <github-uri> git push -u --force origin master
这难道不正是破坏重组的原因吗?只需要压缩所有内容,除了最后一次提交,然后(强制)推送它。
您可以将GitHub存储库设置为模板(通过进入设置并选择存储库名称下的选项)。显示“使用此模板”的按钮;将显示在“代码”页上。这复制了所有的文件,但删除了所有的历史记录,如果你把原始的回购作为私有,这不会显示回购名称下的任何细节(注意,它会在你的网站上显示,因为你拥有这两个文件,但不会对任何人显示)。只有在回购是公开的情况下,原始回购的链接才会出现在回购名称下。
首先,我应该说,如果只有几个提交包含敏感信息,你最好使用git rebase -i来删除它们。但当这些文件经常被触摸时,情况就会变得复杂。同样,使用git-rebase来删除初始提交是非常困难的,所以如果你的初始提交包含你想要删除的东西,那么事情就会变得更加困难。
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,并修改提交消息。如果你觉得自己很勇敢,那就继续:
truncated-master
$ git branch backup-master-just-in-case-i-regret-it-later master $ git push -f origin truncated-master:master
但是,如果我是您的话,我真的会避免执行最后一步,因为它会给当前使用该回购的所有其他人带来问题。相反,只需切换到使用这个新分支(可能有一个更好的名称),而不要宣传旧的分支。
这里的许多答案使用git clone --depth 1来保存最后一次提交(包括提交消息)。
如果你想改变最后一个提交消息(来自克隆的分支),你可以在克隆之后使用命令:git commit --amend -m "UPDATED MESSAGE HERE"。
git commit --amend -m "UPDATED MESSAGE HERE"