如何从一个gerrithub存储库中删除一个大文件条目,然后将自动复制到github重新启动

时间:2015-12-28 11:21:59

标签: git github gerrit rebase

有很多类似于这个问题的问题,但我找不到能解决我的问题的问题

问题是这样的: 前段时间我在gerrithub项目中检查了一个大文件,后来在我删除它的地方进行了检查,不知怎的,这个大文件停止了自动复制到Github,后来我注意到了这个 - 我想要删除大文件并使用我的最新更改为github进行合并,但是当git尝试合并时,大文件不断弹出

-o-o-o-o-o-x-o-o-o-o master
     |
     o-o-o-o mybranch (origin where issue large file was added)
         | 
         o = (where file was removed)

我结束了从Github结帐,然后从我的gerrithub复制然后签到 - 这不是我想要的,因为这破坏了历史,如果不止一个人正在努力,这是一个很大的NO - NO分支。

首先我尝试做以下事情:

git pull <url to gerrit> <branch>
git rebase

然而,即使执行了以下操作,这也会停在问题文件中:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <issuefilename>' <commit id>..HEAD

有没有办法让Github忽略大文件并继续检查?或者是否有一种安全的方法来删除此提交???

2 个答案:

答案 0 :(得分:1)

据我所知,除了重写历史之外没有解决方案(你说这不是你想要的)。这就是为什么您只找到与git filter-branch相关的解决方案的原因。

根据您与谁合作,可以通过团队之间的一些沟通来重写历史记录。一般来说,这是一种不好的做法,但如果需要,可以找到一些方法来解决这一步骤,向同行发送此类变更以及如何处理。

答案 1 :(得分:0)

我终于得到了它的工作,并且历史完好无损 - 我在GitHub和GerritHub存储库上都进行了跟踪

  1. var el = _client.Cypher.Match("(map:Map)-[r:ALSO_AS*0..4{ManCode : {manCode}}]-(alsoas:Map)") .WithParams(new { manCode = relation.ManCode }) .Where((MappingNode map) => map.Id == node.Id) .Return((map, alsoas) => new { node = map.As<MappingNode>(), related = alsoas.CollectAsDistinct<MappingNode>() });

    (仅限GitHub) git stash

    git remote add upstream <gerrit project url>

  2. git pull upstream <branch>
  3. git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <filename>' -f HEAD
  4. git stash apply
  5. 它花了很长时间与GerritHub并且它在一段时间内没有服务,但它回来了,历史记录完好无损,我可以看到大文件被替换为日志中的&#34; --- / dev / null&#34;

    在此之后,我尝试使用GerritHub进行正常git push origin <your branch>,然后将其复制到GitHub