instanceof работает на экземпляры того же класса или свои подклассы
, можно использовать его, чтобы протестировать, если объект является экземпляром класса, экземпляром подкласса или экземпляром класса, который реализует конкретный интерфейс.
ArryaList и RoleList оба Список instanceof
, В то время как
getClass () == o.getClass () будет верен, только если оба объекта (это и o) принадлежат точно тому же классу.
Так в зависимости от того, что необходимо сравнить, Вы могли использовать один или другой.
, Если Ваша логика: "Каждый возражает, равняется другому, только если они - оба тот же класс", необходимо пойти для "равняния", которое я думаю, большинство случаев.
Понятно! Проблема заключалась в том, что я ранее настроил удаленный компьютер с - mirror
, чтобы иметь резервную / общедоступную копию моего репозитория.
Если вы запустите
git remote add --mirror <name> <url>
, он не только помечает удаленный как зеркало (это то, что я хотел для пушей), но также настраивает параметр remote.
для зеркала на + refs / *: refs / *
, это означает, что все ваши ветки внезапно «отслеживают» ваш зеркальный репозиторий, и любая попытка создать ветку отслеживания потерпит неудачу.
(В качестве дополнительного бонуса запускается git fetch
чтобы перезаписать все ваши ссылки старыми из вашего резервного репозитория.)
Решение, которое, кажется, решает эту проблему, - установить remote.
на :
(который , Надеюсь, означает "
, потому что она находит меньше одной
Нет: потому что находит больше , чем одна соответствующая удаленная ветвь, что означает, что функция remote_find_tracking ()
возвращает более одной ветви отслеживания для данной локальной ветки, ссылка
Is some_remote_branch
не ] уже отслеживается одним из ваших местных филиалов?
( git config -l
позволит вам проверить, что вы в настоящее время настроили).
( git branch -r
также может помочь составить список ваших текущих веток удаленного отслеживания.)
удаленные ветки, которые, как я думал, отличаются от веток удаленного отслеживания.
Неверно, как показано на иллюстрации. автор этот поток :
удаленные-ветки - это "настоящие" удаленные-отслеживающие-ветки. Вы не фиксируете их локально, они по сути являются доступными только для чтения копиями того, что происходит в удаленном репозитории.
Если вы попытаетесь выполнить «git-checkout» ветку удаленного отслеживания, вы получите отдельную HEAD.Локальная ветвь:
Ветвь, в которой вы можете фиксировать изменения. При желании ветку можно настроить так, чтобы она «следовала» за одной из ваших веток удаленного отслеживания. Это означает, что «git-pull
» без аргументов (когда ваша локальная ветка извлечена) автоматически будет «git-fetch
», а затем «git-merge
'ветвь удаленного отслеживания.
Теперь:
задача
git-fetch
- обновить ветки удаленного отслеживания любыми изменениями, обнаруженными в удаленном репозитории.
Git- pull
запускаетgit-fetch
, а затем запускаетgit-merge
, чтобы обновить текущую извлеченную ветку.
Проблема для git-merge:
Когда это происходит, Вы можете установить, какая
удаленная-отслеживающая-ветвь
будет выбрана в этой ситуации с помощью опции --track.
- track
устанавливает локальную следующую ветвь для ссылки на удаленную ветку, не в ветвь отслеживания
Учтите, что remote_find_tracking ()
принимает один удаленный и refspec с заполненным src и возвращает данное refspec после заполнения его dst, если соответствующее отслеживание был настроен для удаленного доступа, то есть git.
/*
* For the given remote, reads the refspec's src and sets the other fields.
*/
int remote_find_tracking(struct remote *remote, struct refspec *refspec);
Может быть, он считает, что у него уже есть локальная следующая ветвь, соответствующая some_remote_branch
. У вас есть филиал с таким же названием?
Или наоборот: ваша текущая ветка имеет удаленную ветку с аналогичным именем, что делает ее естественным кандидатом для любого git-merge
: пытается заставить его отслеживать другой удаленный ветка сделает git-merge
неспособным выбрать локальную ветвь для обновления / слияния с изменениями удаленного.
Я видел это также, когда у меня было два удаленных репо с одинаковым (по умолчанию) шаблоном выборки (fetch = +refs/heads/*:refs/remotes/origin/*
) и одинаковыми ветками.
Я так и не понял, как это правильно исправить, поскольку я хочу продолжать push/pull в оба репо, но ручное добавление информации в .git/config
проекта работает, например:
[branch "mybranch"]
remote = origin
merge = refs/heads/mybranch