我恐怕找不到任何类似这种特殊场景的东西.
我有一个有很多历史的git存储库:500多个分支,500多个标签,可以追溯到2007年中期.它包含~19,500次提交.我们想在2010年1月1日之前删除所有历史记录,以使其更小更容易处理(我们将在存档库中保留历史记录的完整副本).
我知道我想要成为新存储库的根目录的提交.但是,我不能找出正确的git mojo来截断repo以从那个提交开始.我猜的是一些变种
git filter-branch
Run Code Online (Sandbox Code Playgroud)
涉及移植是必要的; 它也可能是必要的对待每一个我们要分别保持在200多个分支机构,然后修补回购重新走到一起(这是我不知道该怎么做).
有没有人做过这样的事情?如果重要的话,我有git 1.7.2.3.
我目前在github上有一个私有存储库,我想公开它.但是,一些初始提交包含我不想公开的信息(硬编码的创意等).
在不包含部分或全部提交历史记录的情况下,将最新提交公开(我真的不需要或想要公共存储库中的先前提交)的最简单路由是什么?
我在Git版本控制下有一个项目,我在服务器和本地计算机上工作.我最初将远程原点设置为我的本地计算机,但我现在想将其更改为BitBucket.
在服务器上我使用了命令
git remote set-url origin bitbucket_address
Run Code Online (Sandbox Code Playgroud)
但是现在当我尝试推动我的项目时,我得到了错误
! [remote rejected] master -> master (shallow update not allowed)
Run Code Online (Sandbox Code Playgroud)
造成这种情况的原因是什么?如何解决?
假设我有这样的树:
... -- a -- b -- c -- d -- ...
\
e -- a -- k
Run Code Online (Sandbox Code Playgroud)
我希望它变得公正
... -- a -- b -- c -- d -- ...
Run Code Online (Sandbox Code Playgroud)
我知道如何将分支名称附加到"e".我知道我要做的事情会改变历史,这很糟糕.另外我想我需要使用像rebase或filter-branch这样的东西.但究竟是什么 - 我迷路了.
好.情况如下:我现在有一棵相当大的树(像这样)
s -- p -- r
/
a -- b -- c -- d -- e --- g -- w
\ \
t -- p -- l y -- k
Run Code Online (Sandbox Code Playgroud)
但是在我的第一次提交中(比如前面的"b"),我添加了二进制文件,这使整个回购非常繁重.所以我决定把它们带走.我用filter-branch做了.现在,从第二次提交开始,我有两个长的提交分支.
s -- p -- r
/
a -- b -- c -- d -- e --- …Run Code Online (Sandbox Code Playgroud) 我已经“浅化”了一个回购协议:
\n\nFIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"\ngit rev-parse ${FIRST_COMMIT} > .git/shallow\ngit fsck --unreachable\ngit gc --prune=now\nRun Code Online (Sandbox Code Playgroud)\n\n现在我尝试推动:
\n\n! [remote rejected] develop -> develop (shallow update not allowed)\nRun Code Online (Sandbox Code Playgroud)\n\n我知道这个限制是由于回购协议很浅造成的。
\n\n如何将浅层仓库转换为普通仓库?
\n\n我不在乎失去旧历史。其实我想丢掉旧历史
\n\n为了澄清这一点:
\n\n简单地删除该.git/shallow文件是行不通的:
\xc2\xbb git push -f --set-upstream myorigin develop\nerror: Could not read d18d4a247bebd32a3b57b2c0e5f9c28749083211\nfatal: revision walk setup failed\nerror: remote unpack failed: eof before pack header was fully read\nerror: failed to push some …Run Code Online (Sandbox Code Playgroud) 我希望摆脱很多我回购协议的旧历史,所以我做了一个浅表克隆以仅获取最后的50次提交:
git clone --depth=50 https://my.repo
Run Code Online (Sandbox Code Playgroud)
那行得通,但是当我创建一个新的Gitlab存储库并尝试将其推送时,出现错误:
git remote remove origin
git remote add origin https://my.repo
git push -u origin --all
[...]
! [remote rejected] master -> master (shallow update not allowed)
Run Code Online (Sandbox Code Playgroud)
但是我只希望这50次提交成为我的新仓库的历史记录。我怎么能告诉git它应该只将这50次提交作为新仓库中的唯一提交?