"git branch" выводит результат, даже когда я нахожусь в папке ".gitignored" - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь разобрать ветку, в которой я сейчас нахожусь, к моей подсказке bash.Это довольно легко, используя следующую функцию bash в PS1:

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\w\[$(tput setaf 7)\]\[$(tput setaf 3)\]\$(parse_git_branch) \[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"

Моя проблема возникает, когда в приглашении все еще отображается ветвь «извлечено» из папки внутри файла .gitignore.Например: предположим, что /home/rbroggi/workspace/project_one является корнем моего репозитория, отслеживаемого git (например, место, где находится папка .git).И в этом репозитории у меня есть файл .gitignore /home/rbroggi/workspace/project_one/.gitignore со следующей записью: ignoredfolder/.Я бы предположил пустой вывод / результат из git branch после смены каталога на ignoredfolder, но вместо этого он продолжает выводить ветвь, которую я извлек в родительской папке.Это очень раздражает, и, возможно, если бы я видел, как работает команда git branch, я мог бы избежать вывода игнорируемых папок.

rbroggi@arch ~/workspace/project_one (master) $ pwd
/home/rbroggi/workspace/project_one
rbroggi@arch ~/workspace/project_one (master) $ cat .gitignore
ignoredfolder/
rbroggi@arch ~/workspace/project_one (master) $ cd ignoredfolder/
rbroggi@arch ~/workspace/project_one/ignoredfolder (master) $ git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
 (master)
rbroggi@arch ~/workspace/project_one/ignoredfolder (master) $

Спасибо, что нашли время, чтобы попытаться помочь мне.

Родриго Броджи

1 Ответ

0 голосов
/ 19 января 2019

Вы предполагаете, что разные части вашего рабочего дерева могут быть проверены по-разному. Это неверно.

(Вы можете использовать git checkout для обновления определенных файлов рабочего дерева в соответствии с версией из другого коммита, но это не меняет того, какая версия извлечена; это просто означает, что у вас есть незафиксированные изменения в этом файле, которые, если зафиксированы приведет к тому, что этот файл будет соответствовать версии другого коммита.)

Данная ветвь (или, в отдельном состоянии, данный коммит) извлекается для всего репо. .gitignore не имеет к этому никакого отношения, и независимо от того, куда вы идете в своем рабочем дереве, оно будет одинаковым. Если вы видите ситуацию, когда cd ing, похоже, меняет то, в какой ветке вы находитесь, это потому, что вы изменили то, в каком рабочем дереве вы находитесь.

...