Попробуйте этот код:
string[] str_para_linha_comando(string str, out int argumentos)
{
string[] linhaComando = new string[32];
bool entre_aspas = false;
int posicao_ponteiro = 0;
int argc = 0;
int inicio = 0;
int fim = 0;
string sub;
for(int i = 0; i < str.Length;)
{
if (entre_aspas)
{
// está entre aspas
sub = str.Substring(inicio+1, fim - (inicio+1));
linhaComando[argc - 1] = sub;
posicao_ponteiro += ((fim - posicao_ponteiro)+1);
entre_aspas = false;
i = posicao_ponteiro;
}
else
{
tratar_aspas:
if (str.ElementAt(i) == '\"')
{
inicio = i;
fim = str.IndexOf('\"', inicio + 1);
entre_aspas = true;
argc++;
}
else
{
// se não for aspas, então ler até achar o primeiro espaço em branco
if (str.ElementAt(i) == ' ')
{
if (str.ElementAt(i + 1) == '\"')
{
i++;
goto tratar_aspas;
}
// pular os espaços em branco adiconais
while(str.ElementAt(i) == ' ') i++;
argc++;
inicio = i;
fim = str.IndexOf(' ', inicio);
if (fim == -1) fim = str.Length;
sub = str.Substring(inicio, fim - inicio);
linhaComando[argc - 1] = sub;
posicao_ponteiro += (fim - posicao_ponteiro);
i = posicao_ponteiro;
if (posicao_ponteiro == str.Length) break;
}
else
{
argc++;
inicio = i;
fim = str.IndexOf(' ', inicio);
if (fim == -1) fim = str.Length;
sub = str.Substring(inicio, fim - inicio);
linhaComando[argc - 1] = sub;
posicao_ponteiro += fim - posicao_ponteiro;
i = posicao_ponteiro;
if (posicao_ponteiro == str.Length) break;
}
}
}
}
argumentos = argc;
return linhaComando;
}
Это написано на португальском языке.
Это действительно зависит от того, что вы хотите сделать с филиалом. Да, если вы освободите локальную, это создаст непередающиеся задницы после перезагрузки. С другой стороны, вы будете поддерживать набор различных изменений, и что на вашей ветке будет набор изменений, как если бы они были сделаны в новейшую главу мастера.
Слияние мастера к местным, вместо этого будет продолжать локальные маршировать вперед во времени с мастером, и будет записывать историю, как это произошло. Если вам нужно быть в состоянии восстановить состояние местного в прошлом, то вы захотите сделать это. История никогда не изменится. Но у вас будет более сложная история, чтобы иметь дело с.
Ответ Грега на другой вопрос кажется, что разные ветки остаются локальными для определённых установок, а не перенесены в другие репозитории (курсив добавлен):
Если она локальна для системы, зафиксируйте её в "локальном" ответвлении этой системы, в противном случае зафиксируйте её в "ведущей" и перенесёте в общий репозиторий.
Почти всегда требуется быстрая перемотка вперёд к ответвлениям в общем репозитории. Документация git rebase
объясняет, как восстанавливаться после восходящего ребейза (, т.е. , git rebase
, а затем git push -f
), и это неинтересно никому из вовлечённых в процесс людей.
Для другого подхода см. Никогда не сливать обратно :
Есть действительные случаи, когда вы однажды вилку с намерением никогда не сливать обратно, но в общем случае вы должны очень сильно постараться, чтобы изменения на такой вилке были минимальными.
Далее автор обсуждает политику ветвления для различных клиентских релизов в одном репозитории.