Woops, я скучал по твоему P.S. где вам не нравится иметь несколько именованных веток в одном репо и вы предпочитаете отдельные клоны ... извините за это.
У меня тоже есть несколько больших проектов на C ++, и рабочий процесс клонирования по функциям работал не очень хорошо для меня. Во-первых, мне пришлось закрыть сеанс Vim, а затем снова открыть (многие из тех же) файлов, как только я создал клон. Во-вторых, как вы сказали, много кода должно быть перекомпилировано без необходимости. В-третьих, я должен следить за тем, куда я толкнул и откуда вытащил - запутывается, когда вы запускаете новую функцию, а затем отвлекаетесь на новую. Прежде чем вы это узнаете, у вас есть много клонов, и вы не знаете, какие из них нужно отодвинуть назад к вашей главной.
Вы определенно не хотите использовать именованные ветви (как я уверен, что вы знаете), чтобы справиться с этим, поскольку они довольно постоянны.
Вам нужны закладки: https://www.mercurial -scm.org / wiki / BookmarksExtension
Закладки позволяют создавать легкие (и в других случаях анонимные) ветви для каждой функции, облегчая именование голов в вашем репо. Эти заголовки обычно бывают безымянными, и вам придется посмотреть на вывод hg log или использовать какой-нибудь графический инструмент, чтобы найти номера ревизий для кончика вашей ветви функций. С помощью закладок вы можете называть их описательными именами, например, «my-cool-feature» или «bugfix-392».
Если вам нравится идея закладок, я бы также порекомендовал мое собственное расширение под названием 'tasks': http://bitbucket.org/alu/hgtasks. Это расширение работает как закладки, но добавляет некоторые дополнительные функции. Это позволяет вам создавать ветви функций (теперь называемые задачами) и подавлять нажатие незавершенных задач. Это удобно, когда у вас есть несколько ветвей функций одновременно. Возможно, вы не готовы выполнить задачу my-cool-feature, но bugfix-392 готов к работе. Поскольку задачи отслеживают набор изменений (а не только один набор изменений), есть некоторые вещи, которые вы можете делать с задачами, которые нельзя делать с закладками. Смотрите пример рабочего процесса здесь: http://x.zpuppet.org/2009/03/09/mercurial-tasks-extension/.