что-то подобное ниже может сделать то, что вам нужно:
while read line
do
for word in $line
do
[[ ${#word} -eq 3 ]] && echo "$word" $(grep -c "$word" your_file)
done
done < your_file
Он будет читать ваш файл построчно, слово за словом. Если длина слова равна 3, он выведет слово и количество его вхождений в файл
Следующее утверждение неверно:
Файлы, которые были добавлены в ветвь и затем изменены в ветке, не добавляются при объединении по количеству ревизий
будет означать, что слияние полностью нарушено.
Когда вы выполняете слияние, вам нужно убедиться, что вы действительно слили ревизию, создавшую файл, в противном случае вы получите эти предупреждения об отсутствии цели.
остерегайтесь, если вы сделаете слияние с рабочей копией, а затем решите, что вы не довольны ею, и отмените все, новые добавленные файлы все еще будут в рабочей копии, поэтому, если вы снова объединитесь, неверсированные файлы будут препятствовать слияния новых файлов нету, так что вы их пропустите. Таким образом, запуск «svn status» и удаление неверсированных файлов обеспечит правильное слияние.
Комментарий о добавлении пустого файла не должен быть сделан, потому что тогда у нового файла нет истории, откуда он взялся. Другими словами, это не копия, поэтому «svn log» не будет показывать свою историю. И, наконец, если бы файл представлял собой гигабайтную фотографию, вам бы не хотелось объединять ее в новый файл, потому что тогда в хранилище было бы две копии одного и того же контекста. Объединение и копирование с историей экономит хранилище репозитория (по крайней мере, пока не введено совместное использование репов).
Files that were added to a branch and then changed on the branch don't get added when doing a merge across a number of revisions because subversion is trying to apply a context diff to a file that doesn't exist in the working directory (the new file). You will see a warning from svn stating something like "Skipping missing file blah.c..."
There are two basic ways to deal with this. Commit your branch (this is always a good idea since merging can mess things up sometimes and it's much nicer to simply be able to revert), then merge each specific revision that adds files (one at a time) in order to ensure that the files actually get added to your working directory.
The other option you have is to create empty files (e.g., using the unix touch command) for all the files that were added across the revisions (you can get a list of these files by simply doing the merge with the --dry-run specifier and taking note of all the "Skipping missing file" warnings), then run the merge with your entire revision list (like -r 1023:1040). That will merge the changes into the new empty files and everything should be peachy :)
Я всегда знал, что предупреждения svn указывают на то, что вы как-то облажались. Затем я столкнулся с вышеупомянутым случаем, когда я получал много пропущенных файлов при слиянии из ветки, но я знал, что у меня есть правильные пути для слияния. Пропущенные файлы - это все файлы, которые были добавлены и изменены в ветке, но еще не существовали в магистрали.
Затем я понял, что все эти файлы уже существуют, хотя и не версионированы, в моей рабочей копии ствола - я провел тестовое слияние (не пробный запуск) неделей ранее и вернулся, но файлы так и не были удалены физически. моим клиентом SVN. Как только я физически удалил их из своей рабочей копии транка, проблема исчезла!