什么是需要修补的子模块的git解决方案?

时间:2016-11-23 04:16:03

标签: git diff git-submodules git-diff patch

我希望这个问题很常见,但对于我的生活,我似乎无法找到一个好的解决方案:

  1. Project Foo需要第三方项目栏的来源(我无法控制)

  2. Project Foo将Bar添加为子模块,因为这是解决此问题的Git解决方案

  3. 事实证明,Bar需要一些永远不会合并到上游的小补丁,因为它们非常特定于Foo

  4. 在我的理想世界中:

    我可以“提交”补丁到Foo内的 。这是有道理的,因为这些补丁特定于Foo,不适用于Bar的其他用户。

    在现实世界中:

    似乎我必须提供用户每次运行的自定义脚本以修补其Bar副本(一个痛苦且非常脆弱),或者我必须托管(并始终保持最新)自定义我需要的每一个第三方存储库的副本(也很痛苦,对于小补丁来说似乎相当过分,对于Foo特有的更改似乎很奇怪)。

    我应该用什么解决方案解决这个问题?我认为这很常见,但我感觉Git的“解决方案”是补丁总是在上游合并,这是非常不起作用的。

1 个答案:

答案 0 :(得分:1)

你可以在Foo/Bar子模块中

  • 创建一个patch分支,
  • 将您的Foo特定补丁应用于Bar
  • 为您拥有的Bar fork添加一个远程路径,
  • patch分支推送到该分支Bar remote。

请勿忘记返回Foo,添加并提交新的Bar SHA1(gitlinkspecial entry in Foo index)并推送Foo同样。

现在,每当您从原始遥控器(无法控制)更新(git fetch)Bar时,请将patch分支重新设置为origin/master Bar Bar }}。 (然后,像往常一样,将Bar推送到Foo分叉,返回public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Calendar cur_cal = new GregorianCalendar(); cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar Calendar cal = new GregorianCalendar(); cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR)); cal.set(Calendar.HOUR_OF_DAY, 11); cal.set(Calendar.MINUTE, 30); cal.set(Calendar.SECOND, cur_cal.get(Calendar.SECOND)); cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND)); cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE)); cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH)); Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, 0); AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); } } ,添加,提交和推送