Так как это работает на C ++. В C ++ управление доступом работает на основе per-class , а не на основе каждого объекта.
Управление доступом в C ++ реализовано как статическая функция времени компиляции. Я думаю, что довольно очевидно, что на этапе компиляции реально невозможно реализовать какой-либо значимый контроль доступа к каждому объекту. Этот способ может быть реализован только для каждого класса.
Некоторые рекомендации по управлению объектами присутствуют в спецификации protected access , поэтому он даже имеет свою собственную выделенную главу в стандарт (11.5). Но все же описанные там характеристики каждого объекта довольно рудиментарны. Опять же, управление доступом на C ++ предназначено для работы на основе класса.
На основе Git Tip: Удаление старых локальных веток , которое выглядит как решение jason.rickman . Для этой цели я реализовал пользовательскую команду под названием git seen используя Bash:
$ git gone
usage: git gone [-pndD] [<branch>=origin]
OPTIONS
-p prune remote branch
-n dry run: list the gone branches
-d delete the gone branches
-D delete the gone branches forcefully
EXAMPLES
git gone -pn prune and dry run
git gone -d delete the gone branches
git gone -pn
объединяет сокращение и вывод списка «пропавших» ветвей:
$ git gone -pn
bport/fix-server-broadcast b472d5d2b [origin/bport/fix-server-broadcast: gone] Bump modules
fport/rangepos 45c857d15 [origin/fport/rangepos: gone] Bump modules
Затем вы можете нажать на курок, используя git gone -d
или git gone -D
.
"$BRANCH/.*: gone]"
, где $BRANCH
обычно будет origin
. Это, вероятно, не сработает, если ваш вывод Git локализован на французский и т. Д. Еще один другой ответ для кучи, в значительной степени основанный на ответе Патрика (который мне нравится, потому что, похоже, он устраняет любую двусмысленность в отношении того, где gone]
будет совпадать в выводе git branch
) но добавив * nix bent:
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d' \
| xargs git branch -D
Я завернул это в сценарий git-gone
на моем пути:
#!/usr/bin/env bash
action() {
${DELETE} && xargs git branch -D || cat
}
get_gone() {
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d'
}
main() {
DELETE=false
while [ $# -gt 0 ] ; do
case "${1}" in
(-[dD] | --delete) DELETE=true ;;
esac
shift
done
get_gone | action
}
main "${@}"
NB - Опция --format
, кажется, довольно новый; Мне нужно было обновить git с 2.10 до 2.16.3, чтобы получить его.
Я нашел ответ здесь: Как я могу удалить все ветки git, которые были объединены?
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
Вы можете убедиться что master
, или любая другая ветвь в этом отношении, не удаляется, если добавить еще одну grep
после первой. В этом случае вы бы пошли:
git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d
Так что, если мы хотим сохранить, например, master
, develop
и staging
, мы бы пошли:
git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d
Так как он немного длинный, вы можете добавить псевдоним в .zshrc
или .bashrc
. Шахта называется gbpurge
(для git branches purge
):
alias gbpurge='git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d'
Затем перезагрузите ваш .bashrc
или .zshrc
:
. ~/.bashrc
или
. ~/.zshrc