为什么远程执行的git命令会影响原始服务器?

时间:2014-07-17 22:39:15

标签: php git github ssh

我有一个在一台服务器上运行的php脚本,其中包含一个ssh命令的exec()到另一台服务器。该ssh命令运行包含git命令的脚本。在远程服务器上执行的远程文件中的git命令似乎正在影响发起ssh命令的服务器,使原始服务器停留在错误的git分支上。

我创建了两个脚本来最低限度地重现这个。第一个脚本git_ssh_bug_repro_1.php打印出它的主机名和git分支,然后在另一台服务器(sudo ssh root@test-1 'php /path/git_ssh_bug_repro_2.php')和print_r&#39上运行第二个脚本的exec()&#s; ssh命令; s该输出,然后打印出其主机名和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分支没有被改变或以其他方式被篡改?

1 个答案:

答案 0 :(得分:0)

是的,结果证明这是一个误报的问题。在两个有问题的服务器上,git repo目录通过符号链接到同一服务器上的相同位置。因此,当然更改一个分支也改变了另一个 - 它们是同一个目录。对于错位的问题道歉,并感谢任何花时间看这个问题的人。