复制没有历史记录的git仓库

Raf*_*afe 168 git github git-fork

我目前在github上有一个私有存储库,我想公开它.但是,一些初始提交包含我不想公开的信息(硬编码的创意等).

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

Gau*_*ier 272

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

--depth <depth>
Create a shallow clone with a history truncated to the specified 
number of revisions.
Run Code Online (Sandbox Code Playgroud)

如果您想要有限的历史记录,请使用此功能

  • 给这个人一个cookie(以标记这个答案的形式正确):) (35认同)
  • 这不能解决该问题所隐含的预期用途,即能够推送到远程公共存储库。尝试推送浅表克隆会导致“不允许浅表更新”。 (3认同)

Aga*_*eli 227

使用以下命令:

git clone --depth <depth> -b <branch> <repo_url>
Run Code Online (Sandbox Code Playgroud)

哪里:

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

  • 这实际上是与Gautier相同的答案,但更完整,并有一个例子. (6认同)
  • 这是如何回答这个问题的?所有这一切都是在本地创建一个浅层克隆,但那么呢?如何将历史有限的本地副本复制到新的仓库? (6认同)
  • 的确是。有时需要的就是这个例子。对我来说,写出来就是澄清问题的原因 (3认同)
  • 主要答案是+1,但也是为了解释选择你想要深度应用的分支 - 我知道这是克隆命令的一部分 - 但它在我简单的思想中很好地将它们联系在一起......和我一样简单:) (3认同)
  • @BradDaBug提出了一个有效的观点.我按照上面的说明将深度限制为1,然后更改了远程原点,然后尝试推送到我的新回购.但是,我收到一条错误,指出"不允许浅更新".我发现这个[堆栈溢出答案](/sf/ask/2082373821/)在这个实例中很有用. (2认同)

J W*_*J W 10

删除.git文件夹可能是最简单的路径,因为您不需要/不需要历史记录(如Stephan所说)。

所以,你可以从你的最新创建一个新的回购承诺:如何克隆的种子/无整个历史脚踏启动项目?

git clone <git_url>
Run Code Online (Sandbox Code Playgroud)

然后删除.git,然后运行

git init
Run Code Online (Sandbox Code Playgroud)

或者,如果您想重用当前的 存储库,请执行以下操作使当前的提交成为Git存储库中唯一的(初始)提交?

然后按照上述步骤操作:

git add .
git commit -m "Initial commit"
Run Code Online (Sandbox Code Playgroud)

推送到您的仓库。

git remote add origin <github-uri>
git push -u --force origin master
Run Code Online (Sandbox Code Playgroud)


tim*_*anz 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
Run Code Online (Sandbox Code Playgroud)

  • @rayphi是的`--depth 1`是不必要的,但它也是无害的,它节省了一点点网络带宽(没有点获取你即将删除的历史记录) (7认同)
  • `--depth 1` 在这种情况下是不必要的,因为历史也用 `rm -rf .git` 删除 (3认同)
  • 我想我会这样:`git clone --depth 1 -b $ src_branch $ repo_src_url $ dir &amp;&amp; cd ./$dir &amp;&amp; git commit --amend --author“某人&lt;some@one.com&gt;” -m“ Initial Commit” &amp;&amp; git远程设置URL的起源$ repo_trg_url &amp;&amp; git push -u起源的主服务器` (2认同)

小智 6

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