Java имеет перо инкапсуляции, что означает, что он тесно связывает свойство и поведение объекта. поэтому только с помощью ссылки на класс мы можем назвать его поведение, чтобы изменить его свойство.
, а в режиме наследования только метод переопределяет, так что он может влиять только на его свойство.
Необходимо было создать локальное ответвление и сделать работу над этим, тогда когда Вы возвращаетесь, Вы обновляете ведущее устройство, переоснову к локальному ответвлению, слияние назад ведущему устройству тогда dcommit.
, Таким образом, я попытался бы копировать изменения, создать резервную копию их.
Создают локальное ответвление из svn точка синхронизации, объединяют Ваши изменения там. Затем обратно изменения в основном ответвлении, выборке, переоснове к ответвлению, слиянию в от локального ответвления, фиксируют любые конфликты, тогда dcommit.
$ git checkout -b backup # create a local backup branch with all your work
$ git checkout master
$ git checkout -b backup2 # 2nd copy just to be safe
$ git checkout master
$ git reset --hard <this is the revision of the last svn-id> # clean up master to make the svn merge easier
$ git svn fetch # this should update to the current version on the svn server
$ git rebase master backup # may get a conflict here, fix and commit
... # after conflict is fixed and commited
$ git checkout master
$ git merge backup --ff # merge in your local commits
$ git svn dcommit # push back to the svn
можно получить дополнительную информацию здесь
Другой ответ , Вы могли бы интересоваться.
С большой оценкой для VonC и экстраординарного терпения sfassen ко мне, виду решения разработанных самому. Я не знаю, как или почему, но возможно моя начальная перебаза не работала. Для фиксации его, я закончил тем, что повторно базировался снова. От моего локального магистрального ответвления:
$ git co -b backup # backup the commits to my local trunk
$ git co trunk # return to the local trunk
$ git svn rebase # rebase the trunk from the Svn server
$ git br -d backup # delete the backup branch
ключ, конечно, был то, что переоснова работала на этот раз. Я понятия не имею, почему это не работало, когда я сначала сделал это, но я не могу откатывать часы, таким образом, я не остановлюсь на нем.
Еще раз спасибо за общие предложения и терпение к новичку.
Для завершения sfossen превосходный ответ вот, некоторые детали:
С git-svn
, Вы получаете по умолчанию локальное ответвление, названное ведущим устройством. Вы не должны делать никакой работы над ним, только быть в курсе, это с svn соединяет ответвление магистралью с:
git svn fetch
для получения истории от svn соединяют ответвление магистралью по локальному магистральному ответвлению: это не применит те модификации на Ваш рабочий каталог git checkout master
для включения магистрального ответвления (только если Вы были на другом ответвлении) git rebase trunk
для синхронизации ведущего устройства с соединительной линией. Однако все Ваши модификации должны быть сделаны на другом локальном ответвлении (позволяет, называют его local-devel
).
git branch local-devel
git checkout local-devel
, Если у Вас есть срочная фиксация, чтобы сделать:
git checkout master
: swith на ведущем устройстве (), git svn fetch
& & git rebase trunk
для обновления его с соединительной линией svn git branch fastfix && git checkout fastfix
ответвление он git commit -a
: локальная фиксация, git svn dcommit
обновляют модификацию к удаленному svn repogit checkout master && git rebase trunk
: обновите ведущее устройство снова git branch -D fastfix
: удалите ответвление текущих исправлений git checkout local-devel && git rebase master
: возвратитесь к dev, с обновленной историей, сделанной на ведущем устройстве, воспроизводимом на Вашем ответвлении dev , Это - что-то вроде стычки сначала, но путь, более удобный, чем svn diff
в файле, который будет применен позже.
Я собирался прокомментировать, но думал, что это заслужило большей видимости...
git svn rebase
, предположил переписывать Ваши фиксации. Из описания и комментариев, я получаю впечатление, что после перебазирования Вы сдержали свои старые фиксации на вершине. Фиксации должны быть заменены более новыми версиями, которые не конфликтуют.
, Чтобы избежать необходимости рыть посредством того, чтобы повторно пороть, Вы могли бы хотеть привыкнуть делать быстрый тег прежде, чем сделать Ваш git svn dcommit
. После того, как dcommit успешно выполняется, удалите тег. Если тег перестал работать, можно сделать git reset --hard
сопровождаемый git merge <tag>
. Повторно выполните свою перебазу для приведения в порядок истории назад, перетега и re-dcommit снова.
У меня была похожая ситуация. Я выполнял git svn dcommit
через плохое сетевое соединение, и в какой-то момент он дал сбой. Я обнаружил, что проблема была вызвана тем фактом, что в репозитории Subversion уже была новая фиксация, но локальный аналог git-svn посчитал, что фиксации еще нет в SVN. Решения из других ответов здесь не помогли, однако это помогло:
git svn reset -r <last_svn_commit_git_was_aware_of>
git svn fetch
git svn rebase
После этого я наконец смог выполнить git svn dcommit
без каких-либо ошибок.