Вот правила для того, как эти функции работают:
stringValue.CompareTo(otherStringValue)
null
прибывает перед строкой CultureInfo.CurrentCulture.CompareInfo.Compare
, что означает, что это будет использовать зависимое от культуры сравнение. Это могло бы означать, что ß
выдержит сравнение равный SS
в Германии, или подобный stringValue.Equals(otherStringValue)
null
не считается равным ничему StringComparison
опция, она будет использовать то, что похоже на прямую порядковую проверку равенства, т.е. ß
не то же как SS
, ни на каком языке, или культура stringValue == otherStringValue
==
вызовы оператора помехи Equals(string a, string b)
метод (который в свою очередь переходит к внутреннему EqualsHelper
, чтобы сделать сравнение. .Equals()
на null
строка добирается null
ссылочное исключение, в то время как на [1 118] не делает. Object.ReferenceEquals(stringValue, otherStringValue)
Просто проверки, что ссылки являются тем же, т.е. это не всего две строки с тем же содержанием, Вы сравниваете строковый объект с собой.
<час>Примечание, что с опциями выше того использования вызовы метода, существуют перегрузки с большим количеством опций определить, как выдержать сравнение.
Мой совет, если Вы просто хотите проверить на равенство, состоит в том, чтобы решиться, хотите ли Вы использовать зависимое от культуры сравнение или нет, и затем использовать .CompareTo
или .Equals
, в зависимости от выбора.
То, что вы ищете, - это "ветвь поставщика". Предполагая, что вы хотите поработать над этим кодом и объединить обновления поставщика со своими собственными исправлениями, вот как вы это упростите.
git checkout -b vendor # create a vendor branch and check it out
Это одноразовая вещь. Ветка поставщика будет содержать ТОЛЬКО обновления от стороннего поставщика. Вы никогда не работаете в ветке поставщика, она содержит чистую историю кода поставщика. В названии "поставщик" нет ничего волшебного, это просто моя терминология, перенесенная из CVS.
Теперь мы поместим туда последнюю версию от поставщика.
find . -not -path *.git* -and -not -path . -delete # delete everything but git files
dump the 3rd party code into the project directory # I'll leave that to you
git add . # add all the files, changes and deletions
git commit -a -m 'Vendor update version X.YY' # commit it
git tag 'Vendor X.YY' # optional, might come in handy later
Сначала мы удалим все, чтобы git мог видеть, что поставщик удалено. Способность git видеть удаления и угадывать перемещенные файлы делает эту процедуру намного проще, чем с Subversion.
Теперь вы снова переключаетесь на свою разработку (I ' m, предполагающий хозяин) и слиться с изменениями поставщика.
git checkout master
git merge vendor
Разбирайтесь с любыми конфликтами как обычно. Ваша исправленная версия теперь актуальна у поставщика. Работайте с мастером как обычно.
В следующий раз, когда у поставщика появится новая версия, повторите процедуру. При этом используется отличное слияние git, чтобы ваши исправления были в курсе изменений поставщика.
Здесь немного адвоката дьявола, но действительно ли он вам нужен как репозиторий git?
Может быть, вместо этого настроить сценарий, который загружает и обновляет весь сторонний код в ваших проектах? Я думаю, что вы в конечном итоге столкнетесь с зависимостями третьих сторон, которые сложно импортировать. Например, с python я использую buildout для установки всех своих зависимостей. Таким образом, я могу легко комбинировать git, mercurial, subversion, zip-файлы, пакеты и т. Д.
Однако должно работать что-то вроде следующего:
$ cd repo
$ find . -not -path *.git* -and -not -path . -delete
$ unzip /tmp/thirdparty.zip
$ git add .
$ git commit -a 'Updated version'
То есть удалить все файлы , кроме ] .git
и каталог .gitignore
и т. д. Это для обработки случая удаленных файлов в стороннем проекте. Затем разархивируйте обновленный zip-файл в каталог. Добавляйте в репозиторий любые новые файлы. Зафиксируйте.
Надеюсь, это поможет! :)
Я предпочитаю создать репозиторий git, периодически обновлять его (git commit -a -m 'Update') и просто связывать его в своих проектах (как каталог (ln -s, junction и т. д.) или в виде общей библиотеки). Для ненужных файлов используйте .gitignore.