мерзавец-svn dcommiting единственная фиксация мерзавца

Если Вы имеете в виду new E() тогда, это невозможно. И я добавил бы, что это не всегда корректно - как Вы знаете, имеет ли E общественность никакой-args конструктор? Но можно всегда делегировать создание к некоторому другому классу, который знает, как создать экземпляр - это может быть Class<E> или пользовательский код как это

interface Factory<E>{
    E create();
}    

class IntegerFactory implements Factory<Integer>{    
  private static int i = 0; 
  Integer create() {        
    return i++;    
  }
}
26
задан baudtack 10 August 2009 в 17:35
поделиться

2 ответа

У меня есть один резкий ответ. Вы можете создать новую ветку без foo, bar и baz, а затем cherry-pick bar в новую ветку, а затем git-svn dcommit эту ветку и удалить ее, когда все готово. Хотя это не выглядит изящным.

Итак, предполагаем, что foo, bar и baz находятся в ветке x, а master не имеет ни одного из них.

git branch y master

git checkout y

git cherry-pick

git svn dcommit

git checkout x

git svn rebase

git branch -dy

Если у мастера есть эти коммиты, вы можете сбросить голову как Sizzler предлагает.

4
ответ дан 28 November 2019 в 07:14
поделиться

git svn dcommit не может выборочно зафиксировать панель. если вы напрямую зафиксировали foo, bar и baz в своей основной ветке, вам нужно сделать следующее, чтобы получить только bar в svn.

Предположим, что фиксация sha на bar - это что-то вроде 13abc ...

и git log master показывает все ваши 3 коммиты foo, bar и baz.

  • вам нужно создать ветку из мастера

    git branch wip

ветка wip теперь имеет foo, bar и baz

  • сбросить голову мастера до фиксации перед любым из foo, bar или baz. вы можете сделать это с помощью git reset (прочтите руководство, различия между жесткими, мягкими и смешанными параметрами влияют на незафиксированные изменения в вашем рабочем дереве)

    git reset --hard (COMMIT-ID перед foo, bar, baz)

    (или)

    git reset --hard HEAD ~ 3 (вернуться на 3 версии)

теперь в вашей основной ветке нет ни foo, bar или baz. проверьте с помощью git log.

  • теперь вы можете выбрать только те коммиты, которые хотите передать в svn из ветки wip в master. так что для получения bar

    git cherry-pick wip 13abc (sha of bar commit)

мастер получает только фиксацию бара.

  • теперь git svn dcommit должен нажимать только bar.

Предлагаемое использование в будущем

Таким образом, для git-svn предпочтительнее не делать коммитов непосредственно в главной ветке, которая отслеживает удаленный svn. выполняйте свою работу в локальных ветвях и выборочно объединяйте их в мастеринг перед фиксацией.

13
ответ дан 28 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: