相关疑难解决方法(0)

如何从git存储库中删除旧历史记录?

我恐怕找不到任何类似这种特殊场景的东西.

我有一个有很多历史的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.

git git-filter-branch

188
推荐指数
8
解决办法
11万
查看次数

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

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

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

git github git-fork

168
推荐指数
5
解决办法
7万
查看次数

更改Git远程URL后远程拒绝(不允许浅更新)

我在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)

造成这种情况的原因是什么?如何解决?

git

145
推荐指数
4
解决办法
4万
查看次数

如何在运行git filter-branch后删除旧的历史记录?

假设我有这样的树:

... -- 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)

git git-filter-branch git-branch

17
推荐指数
1
解决办法
7735
查看次数

将浅层仓库转换为普通仓库

我已经“浅化”了一个回购协议:

\n\n
FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"\ngit rev-parse ${FIRST_COMMIT} > .git/shallow\ngit fsck --unreachable\ngit gc --prune=now\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我尝试推动:

\n\n
! [remote rejected] develop -> develop (shallow update not allowed)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道这个限制是由于回购协议很浅造成的。

\n\n

如何将浅层仓库转换为普通仓库?

\n\n

我不在乎失去旧历史。其实我丢掉旧历史

\n\n

为了澄清这一点:

\n\n
    \n
  • 我希望转换后的存储库保留提交历史记录,以及浅层存储库的元数据(日期、作者、提交消息...)
  • \n
  • 我想彻底丢掉旧历史
  • \n
  • 我不关心与原始存储库的兼容性:这将被视为新存储库
  • \n
  • 我不关心提交是否被重新创建,只关心元数据被保留。
  • \n
\n\n

编辑

\n\n

简单地删除该.git/shallow文件是行不通的:

\n\n
\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)

git shallow-clone

6
推荐指数
2
解决办法
2274
查看次数

如何将浅表克隆推到新的仓库?

我希望摆脱很多我回购协议的旧历史,所以我做了一个浅表克隆以仅获取最后的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次提交作为新仓库中的唯一提交?

git

3
推荐指数
2
解决办法
1460
查看次数