Можно ли настроить CVS и Subversion таким образом, чтобы при объединении игнорировались пробелы? - PullRequest
20 голосов
/ 11 октября 2008

CVS и Subversion оба имеют удобную функцию слияния, поэтому при обновлении измененного исходного файла он объединяет изменения, сделанные другими в одном файле.

Однако, если ваши и другие изменения несовместимы - как правило, если вы оба изменили одни и те же части кода - это вызовет конфликт. Оба фрагмента исходного кода будут включены в объединенный файл, и вам необходимо вручную разобраться, какие изменения следует сохранить. Пока все хорошо.

Моя проблема в том, что некоторые из нас используют разные среды разработки (Netbeans и vi, если вы должны знать), и Netbeans имеет функцию автоматического отступа, которая делает отступ в коде. Поэтому, когда мы объединяем изменения, мы иногда получаем огромные конфликты, которые в основном вызваны простыми изменениями отступов и не являются подлинными изменениями в коде. Часто они создают сотни линий очевидных конфликтов, которые должны быть разрешены вручную, но обычно они сводятся к нескольким линиям реальных изменений. Аналогичная ситуация возникает, когда чей-то редактор меняет Unix на переводы строк Windows или наоборот.

Итак - можно ли установить слияние, чтобы игнорировать эти "конфликты" при сравнении двух версий? У Diff есть опция --ignore-space-change или -b, и я хотел бы, чтобы по существу такая же функция была доступна в cvs или svn. Мы используем каждый инструмент в разных проектах, поэтому я был бы рад получить ответ для одного или обоих.

Две последние заметки:

  • ясно, что процесс слияния должен будет сделать произвольный выбор в отношении того, какую версию пробела использовать в объединенном файле. Я в порядке с этим - мы всегда можем переформатировать его позже.
  • Я мог бы избежать этого, если бы был более дисциплинированным и чаще проверял - признавал и понимал. Но я не идеален.

Ответы [ 3 ]

11 голосов
/ 11 октября 2008

Для SVN: в инструменте командной строки есть опция -x , которую можно установить на " b " или " w ", чтобы игнорировать изменения пробела соответственно все пробелы.
Вы также можете предоставить сторонний инструмент для выполнения слияний. Так что если у вас есть слияние, которое игнорирует пробелы, вы можете использовать это. TortoiseSVN, как всегда, является интерфейсом ко всем параметрам, поэтому он также поддерживает игнорирование пробелов.

Команда svn merge описана здесь . Необходимая опция: - diff3-cmd

5 голосов
/ 11 октября 2008

Для пользователей Windows вы можете использовать TortoiseSVN (расширение оболочки Windows Explorer для Subversion), которое поставляется с функциями объединения , которые поддерживают то, что вы описываете:

Игнорировать окончания строк, исключая изменения которые обусловлены исключительно разницей в стиль конца строки.

Сравнение пробелов включает в себя все изменения в отступе и в строке Пробелы в виде добавленных / удаленных строк.

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

Игнорировать все пробелы, исключить все Изменения только для пробелов.

0 голосов
/ 27 октября 2014

TortoiseMerge не имеет CLA (аргументов командной строки), чтобы игнорировать пробелы и игнорировать регистр. Похоже, что после многих поисков этого можно достичь, изменив значения реестра.

/* DisableWhitespaceDifferences and DisableCaseDifferences. 
* The settings for TortoiseMerge is stored in Registry in CurrentUser\Software\TortoiseMerge\
* DWORDS stored the property values.
* 
* IgnoreWS         :   Set to 1 to ignore the whitespace differences. 
*                      Set to 0 to allow the whitespace differences.             
* IgnoreEOL        :   Set to 1 to ignore the End of Line differences. 
*                      Set to 0 to allow the End of Line differences.             
* CaseInsensitive  :   Set to 1 to ignore the Case differences. 
*                      Set to 0 to allow the Case differences.             
*/

// Get the key from the registry
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\TortoiseMerge", true))
{
   if (key != null)
   {
        // Set the IgnoreWS and IgnoreEOL DWORDs based on DisableWhitespaceDifferences is set or not
        key.SetValue("IgnoreWS", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);
        key.SetValue("IgnoreEOL", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);

        // Set the CaseInsensitive DWORD based on DisableCaseDifferences is set or not
        key.SetValue("CaseInsensitive", DisableCaseDifferences ? 1 : 0, RegistryValueKind.DWord);

        // close key
        key.Close();
    }
}
...