我在GitHub上有一个私人存储库,我想让它公开。但是,一些初始提交包含我不想公开的信息(硬编码的凭证等)。
在不包含部分或全部提交历史的情况下,使最近的提交公开(我真的不需要或不希望在公共存储库中保存以前的提交)的最简单方法是什么?
我在GitHub上有一个私人存储库,我想让它公开。但是,一些初始提交包含我不想公开的信息(硬编码的凭证等)。
在不包含部分或全部提交历史的情况下,使最近的提交公开(我真的不需要或不希望在公共存储库中保存以前的提交)的最简单方法是什么?
当前回答
You could set the GitHub repository to be a template (by going to settings and selecting the option just under the repository name). A button saying "Use this template" will then appear on the Code page. This copies over all the files but removes all history and if you keep the original repo as private, this doesn't show any details under the repo name (note that it will show on your site as you own both but not to anyone else). It's only if the repo is public that a link to the original repo appears under the repo name.
其他回答
你可以在克隆时限制历史的深度:
--depth <depth>
Create a shallow clone with a history truncated to the specified
number of revisions.
如果你想要有限的历史记录,可以使用这个。
使用如下命令:
git clone --depth <depth> -b <branch> <repo_url>
地点:
深度是要包含的提交数量。例如,如果你只想要最新的提交,请使用git clone—depth 1 Branch是要从中进行克隆的远程分支的名称。例如,如果你想从master分支提交最后3次,使用git clone——depth 3 -b master Repo_url是存储库的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 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和截断的-master,并根据需要更改提交消息。如果你觉得自己很勇敢,那就继续:
$ git branch backup-master-just-in-case-i-regret-it-later master
$ git push -f origin truncated-master:master
但是,如果我是您的话,我真的会避免执行最后一步,因为它会给当前使用该回购的所有其他人带来问题。相反,只需切换到使用这个新分支(可能有一个更好的名称),而不要宣传旧的分支。