Подтвердить что ты не робот

Можно ли установить CVS и Subversion игнорировать пробелы при слиянии?

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

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

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

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

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

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

Ответ 1

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

Команда svn merge описывается здесь. Необходимый параметр: - diff3-cmd

Ответ 2

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

Игнорировать окончание строки исключает изменения которые обусловлены исключительно различием в line-end style.

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

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

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

Ответ 3

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();
    }
}