【问题标题】:Git pull from another repository without historyGit 从另一个没有历史记录的存储库中拉取
【发布时间】:2015-05-10 01:50:57
【问题描述】:

我在这里是因为:我尝试将我的存储库连接到另一个存储库以保持“最新”,但我试图不提取另一个存储库的整个历史...

为了解释,我使用 Laravel 5 (https://github.com/laravel/laravel) 并创建了自己的 master(它是 laravel/v5.0.1 的一个分支)来自定义内部的一些东西(如 css 框架、一些通用布局等.) -> 称之为“azurky-repo/master”

现在我想用 laravel/master 的最新提交更新我的存储库,但是每次我从 laravel/master 拉取时,我的“git log”都充满了提交(大约 4400),我不想要这个。 (我是一个疯狂的人,想要一个干净的存储库和对一切的大量控制^^)

在理想情况下,我想只更新文件,然后只进行一次提交,并带有类似“从 Laravel/master 更新”之类的消息。 没有任何其他我根本不需要的额外历史条目或参考。

试过了,没有成功:

git pull --depth 1 laravel master

我还有一个额外的历史条目......(最后一个 laravel/master 提交消息并且没有成功修改......可能错过了一些东西)

有人有一个想法(或者我是唯一一个尝试这种事情的疯子......)?

附注:

为了澄清,我希望得到与我相同的结果:

  • 克隆我的仓库的最新版本 (azursky-repo/master)
  • 从 laravel/master 下载所有更新的文件
  • 用这些文件覆盖我的存储库
  • 手动合并每个修改过的文件
  • 然后使用“从 laravel/masgter 更新”推送到 azursky-repo/master

其实我不是受虐狂,也不想绕过git的合并能力...^^

所以我觉得终于有了这段历史:

  • Rev1:“初始提交 - Laravel v5.0.1”
  • Rev2:“Foundation5 / SASS / Gulp 的实现”
  • Rev3:“从 laravel/master 更新”

代替:

  • Rev1:“初始提交 - Laravel v5.0.1”
  • Rev2:“Foundation5 / SASS / Gulp 的实现”
  • 来自 Laravel/master 的 4400 次提交
  • Rev4403:“更新 laravel/master 时合并冲突”(类似这样)

你看到我的希望了吗?

【问题讨论】:

  • 这听起来有点像过早的优化。 Git 的历史非常擅长压缩东西。在 Laravel 的情况下,它是 1.6m 与 12m。考虑到有超过 4,000 次提交,差别不大。
  • 不,这不是优化问题,我只是根本不想要这个额外的提交历史。好像我已经下载了更新的文件并用手动覆盖并合并了我的存储库。但我很欣赏自动合并,这就是我尝试用 Git 来做的原因,我不是受虐狂。下面要澄清一下(因为我无权编辑=()
  • 您应该始终能够编辑自己的问题。不要在答案中进行澄清,它可能会被删除。
  • 为什么不克隆 Laravel 并从那里开始工作,而不是在“初始提交”中复制它?这样你就可以一直处理自己的东西,并且每隔一段时间将 Laravel 的当前开发合并到你自己的分支中。
  • 将问题编辑得更清楚。关于您的回答,我会说“也许”,但我真的不明白您要解释什么^^这种“合并到我自己的分支”的结果是什么?

标签: git laravel github repository revision-history


【解决方案1】:

终于明白了!

答案很简单:

git reset HEAD

对不起,我对 git 很陌生,所以今天下午我在阅读了有关此类主题的问题后找到了解决方案。对索引的所有内容都没有了解,现在更好了=)

所以从一开始我就有一个新的 repo,只有一个初始提交:

git clone git@mygitserver:myuser/myrepo
git log
commit 1
   Initial commit - Laravel v5.0.1 

然后我从 laravel/master 拉出来

git remote add laravel https://github.com/laravel/laravel.git
git pull laravel master
git reset HEAD
git add --all
git commit -m 'Update from laravel/master'
git log
commit 2
    Update from laravel/master
commit 1  
    Initial commit - Laravel v5.0.1

好像没问题,那我再做一个修改。可以肯定:

git rm -rf resources/assets/less/
git add --all
git commit -m 'Suppression de bootstrap'
git log 
commit 3
    Suppression de bootstrap
commit 2
    Update from laravel/master
commit 1  
    Initial commit - Laravel v5.0.1

注意:我写 commit 1/2/3 当然是为了简化

然后要格外确定:

git push origin master

并检查存储库网页

http://i.stack.imgur.com/7XMzb.jpg (抱歉没有放img的权利)

这对我来说没关系 =)

最后我喜欢 git 的工作方式 =)

【讨论】:

    【解决方案2】:

    这可能是一种“黑客”方式。但是,您可以只从该主仓库 git pull,然后 rm 文件夹中的 .git 文件,然后每次您希望从主仓库拉取时,git initgit push -force 到您的仓库版本。

    【讨论】:

    • 是的,我认为它可以完成这项工作,但要做到这一点是多么“艰难的方式”^^ 等着看是否有人有更温和的想法 =)
    • 根据您自己的回答并在处理了一些问题(例如清理标签)后,我创建了一个gist with instructions you can follow here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多