Helpers - компьютеры, интернет, программирование

Почему команды git, выполняемые удаленно, влияют на исходный сервер?

У меня есть php-скрипт, который работает на одном сервере, который включает команду exec() команды ssh на другой сервер. Эта команда ssh запускает скрипт, который включает команды git. Команды git в удаленном файле, выполняемые на удаленном сервере, по-видимому, влияют на сервер, создавший команду ssh, оставляя исходный сервер в неправильной ветке git.

Я создал два скрипта, чтобы минимально воспроизвести это. Первый скрипт git_ssh_bug_repro_1.php выводит свое имя хоста и ветку git, затем запускает ssh-команду exec() второго скрипта на другом сервере (sudo ssh root@test-1 'php /path/git_ssh_bug_repro_2.php') и вывод print_r этого exec, а затем снова выводит свое имя хоста. и ветвь git позже. Второй сценарий также начинает с вывода имени хоста и текущей ветки, затем выполняет git checkout testing, затем снова выводит имя хоста и ветку. Вывод этих двух сценариев, работающих вместе, как описано:

root@abc-1:/path# php git_ssh_bug_repro_1.php
BEFORE running ssh command:
COMMAND: git rev-parse --abbrev-ref HEAD
Hostname: abc-1, current git branch: master
COMMAND: sudo ssh root@test-1 'php /path/git_ssh_bug_repro_2.php'
    Password authentication is disabled to avoid man-in-the-middle attacks.
    Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
    Switched to branch 'testing'
    OUTPUT:
    Array
    (
        [0] => master
        [1] => BEFORE running git checkout command:
        [2] => COMMAND: git rev-parse --abbrev-ref HEAD
        [3] => Hostname: test-1, current git branch: master
        [4] => COMMAND: git checkout testing
        [5] => OUTPUT:
        [6] => Array
        [7] => (
        [8] =>     [0] => master
        [9] =>     [1] => Your branch is ahead of 'origin/testing' by 21 commits.
        [10] => )
        [11] => AFTER running git checkout command:
        [12] => COMMAND: git rev-parse --abbrev-ref HEAD
        [13] => Hostname: test-1, current git branch: testing
    )
AFTER running ssh command:
COMMAND: git rev-parse --abbrev-ref HEAD
Hostname: abc-1, current git branch: testing
root@abc-1:/path#

РЕЗЮМЕ: почему команды git, запускаемые скриптом на одном сервере, влияют на статус git другого сервера (в данном случае заставляя его переключиться на неправильную ветку) только потому, что указанный скрипт был отключился с другого сервера по ssh? И как я могу сделать так, чтобы ветка git исходного сервера не была изменена или иным образом подделана?

17.07.2014

  • Похоже, это может быть вызвано совершенно не связанной частью нашей сетевой конфигурации. Я думаю, что два моих разных сервера на самом деле ссылаются на одно и то же место, и, таким образом, изменение ситуации с git на одном изменяет оба... потому что это один и тот же сервер. Я обновлю, как только подтвержу, что это проблема. 18.07.2014

Ответы:


1

Да, это оказалось ложноположительной проблемой. На обоих рассматриваемых серверах каталог репозитория git оказался символической ссылкой на одно и то же место на том же сервере. Так что, конечно, изменение ветки на одном также изменило ее на другом - это один и тот же каталог. Приносим извинения за неуместный вопрос и благодарим всех, кто нашел время, чтобы взглянуть на это.

18.07.2014
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..