Когда ветки удаляются удаленно, вам нужно обрезать ваш локальный репозиторий — проще всего это сделать с помощью
git fetch -p
Это обновит ваш локальный репозиторий со всеми изменениями, внесенными в удаленный репозиторий. , но без обновления какой-либо из ваших локальных веток. После запуска
git branch --remote
больше не будет показывать удаленную удаленную ветку.
git-репозитории полны как в вашей собственной системе, так и на сервере. Поэтому, когда вы впервые клонируете репозиторий, вы получаете полную копию, и ваш локальный git «знает» обо всех удаленных ветках, а также о ваших локальных ветках. Эта информация не синхронизируется автоматически, поэтому, когда ваш коллега удалил ветку release
на сервере, ваш локальный репозиторий git не потерял своего понятия об удаленной ветке release
.Синхронизация с git fetch
обновляет всю локальную информацию в удаленных ветках, чтобы они соответствовали состоянию на сервере (строго говоря, удаленному репозиторию, где бы он ни находился), но не удаляя никакой локальной информации в удаленных ветках. Сокращение с помощью git fetch -p
(или git fetch --prune
или git remote prune
) удаляет локальную информацию об удаленных ветвях, которые были удалены.
Если вы используете sudo -s
, ваш $HOME
не обновляется, поэтому история вашей оболочки хранится в вашей собственной учетной записи.
(Имейте в виду, что другие файлы конфигурации/истории, такие как созданные vim
, также создаются с правами root. Это означает, что в вашем домашнем каталоге могут оказаться файлы, принадлежащие пользователю root. Это может создать «интересные» ситуации, когда вы хотите изменить их, не будучи root, и иногда вам нужно будет запустить что-то вроде chown -R myusername "$HOME"
, чтобы исправить это.)
Вот как мы справились с этим на предыдущем месте работы.
Во-первых, у нас был безопасный хост-бастион, на который администраторы входили для всех root-доступов к целевым машинам. На этом хосте была настроена специальная учетная запись keymaster
, которая содержала закрытые ключи, соответствующие root на целевых хостах. (У нас также была система, в которой новые хосты автоматически регистрировались сами. Но это выходит за рамки здесь.)
Администраторы будут входить на этот хост-бастион с учетными записями уровня пользователя -, а затем подключаться к целевым системам.
За исключением нескольких из нас, имеющих доступ к root на самом хосте-бастионе, ни один администратор не мог фактически получить доступ к ключам напрямую; вместо этого они использовали команду connect
, запускаемую под sudo (как keymaster
, а не root )для подключения. Эта команда connect устанавливает переменную среды REMOTE_ADMIN
в качестве имени подключающегося пользователя и подключается к целевой системе как root.
Затем удаленные системы были настроены на AcceptEnv=REMOTE_ADMIN
в sshd_config
и файлы.bashrc для установки BASH_HISTORY
в ~/.bash_history-$REMOTE_ADMIN
.
При такой настройке разные .bash_history
файлы не являются защищенными записями, но они, по крайней мере, различны для не -злонамеренного оглядывания того, что произошло. Запись безопасности находится на хосте-бастионе и показывает, кто и когда подключался. (Мы также использовали двухфакторную аутентификацию для команды sudo connect
.)
Кроме того, за исключением подрыва хостов, нет необходимости беспокоиться о корневом доступе за пределами назначенной системы (, будь то злонамеренный или просто для «удобства» ). И хотя ключи можно удалить, нет необходимости делать это только потому, что чей-то уровень доступа изменился.
Вы можете использовать все это решение или его часть; просто иметь .bash_history-$SUDO_USER
может быть достаточно, в зависимости от того, чего вы действительно пытаетесь достичь.