Как я импортирую сторонний lib в мерзавца?

Вот правила для того, как эти функции работают:

stringValue.CompareTo(otherStringValue)

  1. null прибывает перед строкой
  2. это использует CultureInfo.CurrentCulture.CompareInfo.Compare, что означает, что это будет использовать зависимое от культуры сравнение. Это могло бы означать, что ß выдержит сравнение равный SS в Германии, или подобный

stringValue.Equals(otherStringValue)

  1. null не считается равным ничему
  2. , если Вы не определите StringComparison опция, она будет использовать то, что похоже на прямую порядковую проверку равенства, т.е. ß не то же как SS, ни на каком языке, или культура

stringValue == otherStringValue

  1. не Является тем же как [1 111].
  2. Эти == вызовы оператора помехи Equals(string a, string b) метод (который в свою очередь переходит к внутреннему EqualsHelper, чтобы сделать сравнение.
  3. Вызов .Equals() на null строка добирается null ссылочное исключение, в то время как на [1 118] не делает.

Object.ReferenceEquals(stringValue, otherStringValue)

Просто проверки, что ссылки являются тем же, т.е. это не всего две строки с тем же содержанием, Вы сравниваете строковый объект с собой.

<час>

Примечание, что с опциями выше того использования вызовы метода, существуют перегрузки с большим количеством опций определить, как выдержать сравнение.

Мой совет, если Вы просто хотите проверить на равенство, состоит в том, чтобы решиться, хотите ли Вы использовать зависимое от культуры сравнение или нет, и затем использовать .CompareTo или .Equals, в зависимости от выбора.

12
задан Mogsdad 15 September 2015 в 15:27
поделиться

3 ответа

То, что вы ищете, - это "ветвь поставщика". Предполагая, что вы хотите поработать над этим кодом и объединить обновления поставщика со своими собственными исправлениями, вот как вы это упростите.

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, чтобы ваши исправления были в курсе изменений поставщика.

24
ответ дан 2 December 2019 в 06:26
поделиться

Здесь немного адвоката дьявола, но действительно ли он вам нужен как репозиторий 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-файл в каталог. Добавляйте в репозиторий любые новые файлы. Зафиксируйте.

Надеюсь, это поможет! :)

1
ответ дан 2 December 2019 в 06:26
поделиться

Я предпочитаю создать репозиторий git, периодически обновлять его (git commit -a -m 'Update') и просто связывать его в своих проектах (как каталог (ln -s, junction и т. д.) или в виде общей библиотеки). Для ненужных файлов используйте .gitignore.

0
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

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