在Windows 2012上设置和访问git

时间:2019-01-04 03:51:22

标签: windows git

我正在使用以下计算机。

本地计算机:Windows10。我在这里也有Windows 7计算机,但并没有真正使用它们。

Windows Server 2012 r2(不在同一物理位置)。这不是生产服务器,它只是我用来托管各种脚本的服务器。

我目前正在使用IP地址访问Windows服务器。但是,如果可以通过某种方式简化此操作,则可以为它分配一个静态IP链接到子域。

显然是使用服务器的真实IP,但出于本文的目的,我使用的是1.1.1.1

我已经在Windows服务器上设置了git。我跟着: https://www.server-world.info/en/note?os=Windows_Server_2012&p=openssh

我刚刚删除了所有正在测试的存储库,所以我可以在这里逐步进行操作,希望有人指出我出了问题的地方。

我在服务器上创建了一个名为“ kannkor”的用户,并为其分配了密码。

我当前正在RDC(远程桌面连接)进入服务器。所以我可以做任何事情,如果需要的话可以从那里进行验证。

我已打开腻子,连接类型为“ ssh”,主机名是服务器IP,位于端口22上。 它问我:

login as: 

我输入“ kannkor” 然后它问:

kannkor@1.1.1.1's password: 

我输入。 它带我去:

kannkor@computername C:\Users\kannkor>

我希望存储库位于d驱动器上。 我可以更改目录:

我创建一个新文件夹:

d:
mkdir repos
cd repos

从RDC中,我可以验证repos文件夹现在已在D下创建: 通过心理检查清单,这意味着已设置我对该驱动器/文件夹的用户名/密码/权限。

在这个阶段,我感觉我已经遵循了100个演练,而它们的结果都是一样的。因此,为了争辩,我将遵循这一点: http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/

在本地计算机上,我打开git bash并输入:

ssh kannkor@1.1.1.1

它要求我输入密码,我输入密码。

我将执行以下操作(在演练之后)。

d:
cd repos

我现在在:

D:\repos>

通过更改驱动器/目录,也许这是我出了问题的地方...但是,一定有可能..继续本演练

mkdir my_project.git
cd my_project.git
git init --bare
-> Initialized empty Git repository in D:/repos/my_project.git/

我做了git update-server-info(我已经尝试了有无,并且对最终错误没有影响)。

在RDC上,我可以看到它创建了文件夹my_project.git,并且其中包含一些文件/文件夹,挂钩,信息,对象等。不要触摸它,只需注意它即可。

到本地计算机上

我键入exit,以退出ssh

像以前一样,我希望将它们保存在d驱动器上。为避免混淆,我将调用父目录存储库。

我目前在:/ d /存储库

mkdir my_project
cd my_project
git init
-> Initialized empty Git repository in D:/repositories/my_project/.git/
(changed git add * to git add --all)
git add --all
git commit -m "my initial commit message"
>On branch master

Initial commit

nothing to commit

git remote add origin kannkor@1.1.1.1:d/repos/my_project.git
git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'kannkor@1.1.1.1:d/repos/my_project.git'

我相信这是因为最初的提交没有任何内容。 仍在本地计算机上,我导航至:d:\ repositories \ my_project \

我创建一个文件:placeholder.txt,并添加一行文本,然后将其保存。

返回git bash

git add --all

git commit -m "my initial commit message"
[master (root-commit) ac54490] my initial commit message
 1 file changed, 1 insertion(+)
 create mode 100644 placeholder.txt

对于本地提交更好。我再试一次。

git push -u origin master
kannkor@1.1.1.1's password:
fatal: ''d/repos/my_project.git'' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这是我被卡住的地方。我的假设是这一行:

git remote add origin kannkor@1.1.1.1:d/repos/my_project.git

我尝试了多种方法,包括:

git remote add origin kannkor@1.1.1.1:d:/repos/my_project.git

使用\代替/。在其末尾添加斜杠。

我尝试过的所有尝试都失败了。

fatal: ''D:\repos\my_project.git'' does not appear to be a git repository
fatal: ''D:/repos/my_project.git'' does not appear to be a git repository

我也使用scp尝试了此操作:

https://stackoverflow.com/a/20987150

结果相同。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

d/repos/my_project.git看起来无效。

/d/repos/my_project.git

尝试:

git remote set-url origin kannkor@1.1.1.1:/d/repos/my_project.git
git push -u origin master

答案 1 :(得分:0)

初步的介绍,但我相信我有答案(解决)。

https://github.com/PowerShell/Win32-OpenSSH/wiki/Setting-up-a-Git-server-on-Windows-using-Git-for-Windows-and-Win32_OpenSSH

简而言之,这里有一个known bug(自2017年以来一直存在),当服务器的默认外壳使用cmd.exe时,它不使用单引号。这就是为什么错误会以看起来奇怪的双单引号返回的原因。

fatal: ''D:\repos\my_project.git'' does not appear to be a git repository

解决方法是将服务器的默认外壳从cmd.exe更改为powershell。有关详细信息,请参见found here

我正在复制/粘贴上面的链接,以防万一该链接失效。

  

在配置DefaultShell之前,请确保满足以下先决条件   被满足

     

OpenSSH安装路径在系统PATH中。如果还不存在,   修改系统PATH并重新启动sshd服务。

     

请按照以下步骤操作:

     

在服务器端,在Windows中配置默认​​的ssh shell   注册表。   计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ OpenSSH \ DefaultShell-   Shell可执行文件的完整路径

     

计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ OpenSSH \ DefaultShellCommandOption   (可选)-已配置的默认外壳程序需要进行的切换   执行命令,立即退出并返回到调用过程。   默认情况下为-c。

     

Powershell cmdlet将Powershell bash设置为默认Shell

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value  C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force  
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value  "/c" -PropertyType String -Force

为确认您已正确完成上述操作,在SSH进入服务器时,应使用Powershell,而不是cmd提示符。

最后,命令的正确语法确实是这样的:

kannkor@1.1.1.1:D:/repos/my_project.git

有点像把它们放在一起。

git remote add origin kannkor@1.1.1.1:D:/repos/my_project.git
git push origin master
kannkor@1.1.1.1's password:
Everything up-to-date