Изменение строки в одной строке, поставленное Далвичем, показывает каждую строку по-разному - PullRequest
0 голосов
/ 02 октября 2018

У меня есть файл с изменением в одну строку: git status отчеты

S:\mydir\AEL>git status CodingTools_SourceControl.ael
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   CodingTools_SourceControl.ael

no changes added to commit (use "git add" and/or "git commit -a")

А вот изменение, которое diff сообщает

S:\mydir\AEL>git diff CodingTools_SourceControl.ael
diff --git a/AEL/CodingTools_SourceControl.ael b/AEL/CodingTools_SourceControl.ael
index 7ae86d7..fd53caa 100644
--- a/AEL/CodingTools_SourceControl.ael
+++ b/AEL/CodingTools_SourceControl.ael
@@ -22,7 +22,7 @@ import ael
 import acm
 is_64_bit = True

-# Special-purpose overrides
+# Special-purpose overrides. These deliberately require minor code changes.
 #CodingTools_PyLint.VERBOSE = True
 #CodingTools_PyLint.PYLINTRC = "default.pylintrc"

Теперь я ставлю свойизменение:

S:\mydir\AEL>git add CodingTools_SourceControl.ael

S:\mydir\AEL>git status CodingTools_SourceControl.ael
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   CodingTools_SourceControl.ael

И если я запрашиваю отчет о поэтапном изменении, я вижу такое же однострочное изменение:

S:\mydir\AEL>git diff --cached CodingTools_SourceControl.ael
diff --git a/AEL/CodingTools_SourceControl.ael b/AEL/CodingTools_SourceControl.ael
index 7ae86d7..fd53caa 100644
--- a/AEL/CodingTools_SourceControl.ael
+++ b/AEL/CodingTools_SourceControl.ael
@@ -22,7 +22,7 @@ import ael
 import acm
 is_64_bit = True

-# Special-purpose overrides
+# Special-purpose overrides. These deliberately require minor code changes.
 #CodingTools_PyLint.VERBOSE = True
 #CodingTools_PyLint.PYLINTRC = "default.pylintrc"

Теперь я отменяю изменение

S:\PrimeObjects\ADSO71\KEATING\AEL>git reset CodingTools_SourceControl.ael
Unstaged changes after reset:
M       AEL/ATS_SourceControl.ael
...several other unstaged changes...

Я хочу иметь возможность использовать Далвич для управления постановкой и фиксацией.Поэтому внутри Idle, после reset, я делаю это:

>>> from dulwich.repo import Repo
>>> repo = Repo(br"S:\mydir")
>>> repo.stage([br"AEL\CodingTools_SourceControl.ael"])

После этого git status показывает изменение как поэтапное, как и до

S:\mydir\AEL>git status CodingTools_SourceControl.ael
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   CodingTools_SourceControl.ael

Но если ятеперь введите команду git diff, я получу отчет о разнице, который показывает все 1500+ строк файла как измененные:

S:\mydir\AEL>git diff --cached --stat CodingTools_SourceControl.ael
 AEL/CodingTools_SourceControl.ael | 3082 ++++++++++++++++++-------------------
 1 file changed, 1541 insertions(+), 1541 deletions(-)

Редактировать: В продолжение полезного комментария @ RomainVALERI,Я попробовал эту команду

S:\mydir\AEL>git diff --cached --stat --ignore-cr-at-eol CodingTools_SourceControl.ael
 AEL/CodingTools_SourceControl.ael | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

, и она сообщает об изменении одной строки.Так что это проблема конца строки.Но мне нужно, чтобы операции Дульвича были взаимозаменяемыми с операциями командной строки.Как я скажу Далвичу Repo.stage() обработать окончания строк так, как это делает git add?

Я пытался использовать porcelain.add() вместо Repo.stage()

porcelain.add(repo, r"S:\mydir\AEL\CodingTools_SourceControl.ael")

, но это не помоглопомочь любому.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Из кода в dulwich.index.blob_from_path_and_stat() видно, что Далвич не обращает внимания на настройку core.autocrlf и не обращает никакого внимания на что-либо в файле .gitattributes и просто записывает побайтную копию того, что находится вфайл рабочего каталога в базе данных Git.

Так что Dulwich 0.19.5 и Windows не очень подходят, если ваша команда также будет использовать другие инструменты, которые знают о политиках конца строки и применяют их так же, как Gitделает.Более поздняя версия вполне может решить эту проблему, но сейчас это масло и вода.

Как новичок в Git, я нашел Помните о конце вашей строки Тимом Клемом в GitHub - очень ясное объяснениедюжину или около того я читаю, пытаясь понять проблему и решить ее.

0 голосов
/ 02 октября 2018

Вы можете управлять окончаниями строк, задав правила в файле .gitattributes - см. Больше на https://git -scm.com / docs / gitattributes

Я всегда использую один со следующим содержаниемвсякий раз, когда я создаю новый исходный репозиторий:

* text=auto

, потому что его введение позже сопряжено с некоторыми трудностями, особенно когда ваш репозиторий используется совместно с командой - потому что он меняет все (или большинство) файлов, и более того,это изменение появляется после новой проверки, а не в текущей рабочей копии.

Чтобы минимизировать эту боль, вы можете указать, что она влияет только на ваше расширение.

...