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

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

#1楼 票数:424

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

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

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

#2楼 票数:385

使用以下命令:

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

在哪里:

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

#3楼 票数:35

删除.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

#4楼 票数:6

#!/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

#5楼 票数:0

这不正是压扁变基所做的吗? 只需压缩除最后一次提交之外的所有内容,然后(强制)推送它。

#6楼 票数:-1

我遇到了几乎相同的问题,但我不仅要获得master分支,还要获得其他分支。

#!/bin/bash

dir="<repo name>"
git_repo_source="<source git address>"
git_repo_destination="<destination git address>"
branches="<space separated branch names>"
echo "Start moving repository $git_repo_source"
echo "Working with branch $branches"
for branch in $branches
do
    echo "clone $git_repo_source"
    git clone --single-branch --branch $branch $git_repo_source
    echo "enter directory $dir"
    cd ./$dir
    rm -rf .git
    git init
    git checkout -b $branch
    git add .
    git commit -m "Initial Commit in branch $branch"
    git remote add origin $git_repo_destination
    echo "Push $branch"
    git push -u origin $branch
    cd ..
    rm -rf ./$dir
done

#7楼 票数:-1

您可以将 GitHub 存储库设置为模板(通过转到设置并选择存储库名称正下方的选项)。 代码页上将出现一个“使用此模板”按钮。 这会复制所有文件,但会删除所有历史记录,如果您将原始存储库保留为私有,则存储库名称下不会显示任何详细信息(请注意,它将显示在您的站点上,因为您拥有这两个文件,但不会显示给其他任何人) . 只有当 repo 是公开的,原始 repo 的链接才会出现在 repo 名称下。

  ask by Rafe translate from so

未解决问题?本站智能推荐:

1回复

Git:将forked repo重置为上游repo的当前副本

我对上游仓库的分叉副本做了一些不必要的更改,上游仓库也在那个时候发生了变化。 所以我想做的是基本上分配上游仓库的新副本而不保留任何我的更改。 不幸的是,我似乎无法弄清楚如何做到这一点。 我尝试了三种方法: 按照如何更新GitHub分叉存储库的说明进行操作? 除了rebase
2回复

Github 将现有的 repo 转换为 fork

我的组织有一个名为org/A.git的主org/A.git 。 我首先将它作为me/A.git到 Github。 我的组织管理员将org/A.git私有,这打破了分叉。 然后他更改了允许分叉私有存储库的设置。 me/A.git仍然不是一个叉子,而是一个简单的克隆。 我怎样才能让me/A.git再次
1回复

与在 fork 上开发相比,我什么时候应该创建一个新的 repo?

我分叉了一个不再维护的项目,并且已经大大超出了原始项目的范围。 我的 fork 比原始项目更活跃,但更改永远不会合并(也不打算合并)回主分支。 我应该将我的代码复制到一个全新的存储库吗? 还是我应该继续在 fork 上开发? 我不知道 fork 是仅用于应该最终合并的代码,还是用于从原始存储库中分
1回复

我可以分叉一个分叉的 repo 来访问它,原始 repo 是私有的吗?

在不同的组织下有一个我无权访问的回购。 我的任何朋友都可以分叉并给我访问权限吗? 我可以分叉他们已经分叉的回购吗? 有没有其他方法可以访问回购? 只读访问就可以了。 感谢大家的评论。 我只是想了解是否有任何其他合法方式可以快速访问 repo。 想了解技术可行性。 考虑到将我添加为合作者需要时间
1回复

如何将 git fork 的更改合并到我的 repo 的 master 中?

我在 Github 上有一个存储库,有人对它进行了分叉并进行了更改(这有助于改进存储库)。 是否有一个git命令允许我接受其他用户所做的更改并修改我的原始主存储库以匹配该分叉存储库?
1回复

使用git更新共享的分叉存储库

考虑存储库A是通过Gerrit管理的github存储库。 我克隆了存储库A,我从存储库A的主分支开始创建了一个新的分支。我在新的gitlab存储库B上推送了这个新分支。我是存储库B的管理员,我与其他开发人员共享它。 开发人员不能推动这个分支,但我可以合并他们的拉取请求。 我在存储库B的主分
4回复

Git - 在没有 Github 的情况下分叉

“forking”的功能是github特有的吗? 或者是否有一个纯粹的 git 过程来创建可以从父级获取更新的“复制”子存储库? 如果是这样,如何? 编辑:我一定对git clone做了什么感到困惑。 我的理解是git clone是我在我的机器上执行的操作,以获取存储库的本地副本以进行更改、 c
1回复

派生一个项目并获取更新,而不会带来以前的历史直到首次提交

假设我有存储库A,并创建了存储库B,我打算将其作为A的分支。我克隆A并删除.git,然后重新创建它,添加源和推送,从而将历史记录替换为1 commit。 一切正常,直到项目A更新文件。 因为我想跟上A,所以我将更改取入并合并到B中。但是,当我获取更改时,它也会获取所有过去的历史记录,标签,分