Иногда было бы неплохо иметь возможность сказать что-то вроде:
(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main
чтобы увидеть изменения, внесенные в конкретную функцию в исходном файле с момента последней фиксации, или полную историю изменений. У меня вопрос двоякий:
- Существует ли что-то, что делает это?
- Будет ли такой инструмент практичным? При каждой ревизии нужно было бы выполнить простой анализ кода, чтобы сравнить разные версии функции; будет ли накладные расходы слишком большими, чтобы они были эффективными?
version-control
tools
jches
источник
источник
Ответы:
Но что более важно, вам нужно будет делать то же самое для каждого языка, который вы хотите поддерживать. VCS, продающий точку, работающую только на C-коде, не получит большой тяги. Даже если вы игнорируете все малопонятные языки, было бы огромным обязательством поддерживать даже 10 лучших языков.
И, как указал Роберт, возможность сразу перейти к методу не является огромным преимуществом по сравнению с необходимостью вручную перейти к методу в инструменте сравнения.
источник
SVN на самом деле делает что-то близкое к тому, что вы хотите.
Вы можете использовать команду:
-x -p
Обеспечивает имя функции «C» на верхней части набора изменений. который выглядит такЭто не фильтрует, но вы можете grep / search, чтобы служить вашей цели тесно.
Я предполагаю, что это только для 'C' (или C / C ++). Тем не менее, я думаю, что если svn будет востребован, он сделает его доступным и для других языков.
Я не совсем согласен с аргументом, что VCS НЕ должен этого делать. В конце концов, мы хотим, чтобы все IDE или редакторы (такие как VIM, EMACS) делали подсветку синтаксиса, которая специфична для каждого языка и поддерживала множество одновременно. Поэтому VCS, будучи инструментом разработчика, также должен поддерживать такую функциональность.
Конечно, благодаря вашему вопросу, что я его обнаружил. Я никогда не использовал это раньше.
источник
Не вдаваясь в подробности, ... но вы можете проверить сайт Semantic Designs и ассортимент их продуктов. Они предлагают некоторые инструменты, которые чувствительны к языку , так сказать, в отсутствие лучшего термина.
источник
Монтичелло может сделать это (например, http://wiresong.ca/monticello/v2/docs/changes-browser.html ), но это, конечно, обман, потому что это работает только для Smalltalk.
источник
Чтобы показать, какая ревизия и автор в последний раз изменили каждую строку файла:
источник
ENVY и STORE оба делают это. Интересно, что, как и в случае с Моничелло, о котором упоминал Логан Капальдо, они тоже предназначены для Smalltalk.
источник