我在GitHub上有一个私人存储库,我想让它公开。但是,一些初始提交包含我不想公开的信息(硬编码的凭证等)。
在不包含部分或全部提交历史的情况下,使最近的提交公开(我真的不需要或不希望在公共存储库中保存以前的提交)的最简单方法是什么?
我在GitHub上有一个私人存储库,我想让它公开。但是,一些初始提交包含我不想公开的信息(硬编码的凭证等)。
在不包含部分或全部提交历史的情况下,使最近的提交公开(我真的不需要或不希望在公共存储库中保存以前的提交)的最简单方法是什么?
当前回答
首先,我应该说,如果只有几个提交包含敏感信息,你最好使用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
但是,如果我是您的话,我真的会避免执行最后一步,因为它会给当前使用该回购的所有其他人带来问题。相反,只需切换到使用这个新分支(可能有一个更好的名称),而不要宣传旧的分支。
其他回答
你可以在克隆时限制历史的深度:
--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
首先,我应该说,如果只有几个提交包含敏感信息,你最好使用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
但是,如果我是您的话,我真的会避免执行最后一步,因为它会给当前使用该回购的所有其他人带来问题。相反,只需切换到使用这个新分支(可能有一个更好的名称),而不要宣传旧的分支。
#!/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所说)。
所以你可以从最近的提交中创建一个新的repo: (如何克隆种子/启动项目没有整个历史?)
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