远程 Git 推送后目标目录为空

5

我正在尝试创建一个远程git存储库(使用--bare选项进行初始化),并将一些源文件推送到其中。

我有一个本地git存储库和一个裸远程存储库:

ubuntu@ip-LOCAL-IP:~/notebooks$ cat .git/config  
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "nbcsm"]
    url = ssh://ubuntu@ec2-RE-DA-CT-ED.compute1.amazonaws.com/home/ubuntu/notebooks/.git
    fetch = +refs/heads/*:refs/remotes/nbcsm/*

我使用以下步骤创建本地仓库: 1. git init 2. git add *.ipynb 3. `git commit -m "第一次导入IPython Notebooks"`
然后,我通过使用vi编辑一个*.ipynb文件并运行git status来验证我的本地仓库是否跟踪了文件。Git确实看到了更改的文件。
然而,当我执行git push nbcsm master时,推送似乎成功了,但是我远程计算机/实例上的目标目录为空(即它不包含我尝试推送到远程的文件)。
ubuntu@ip-LOCAL-IP:~/notebooks$ git push nbcsm master
Enter passphrase for key '/home/ubuntu/.ssh/id_rsa': 
Counting objects: 11, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 2.49 KiB, done.
Total 9 (delta 5), reused 0 (delta 0)
To ssh://ubuntu@ec2-ec2-RE-DA-CT-ED.amazonaws.com/home/ubuntu/notebooks/.git
7a50f44..295a4fa  master -> master
ubuntu@ip-LOCAL-IP:~/notebooks$

验证文件不在远程服务器上:

ubuntu@ip-LOCAL-IP:~/notebooks$ ssh ubuntu@ec2-ec2-RE-DA-CT-ED.compute-1.amazonaws.com
Enter passphrase for key '/home/ubuntu/.ssh/id_rsa': 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-virtual x86_64)

* Documentation:  https://help.ubuntu.com/

System information as of Tue Dec 18 16:46:23 UTC 2012

System load:  0.02              Processes:           63
Usage of /:   41.7% of 7.97GB   Users logged in:     0
Memory usage: 12%               IP address for eth0:REMOTE-IP
Swap usage:   0%

Graph this data and manage this system at https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest
http://www.ubuntu.com/business/services/cloud
*** /dev/xvda1 will be checked for errors at next reboot ***

ubuntu@REMOTE-IP:~$ sudo find /home/ubuntu/ -name "*.ipynb"  
/home/ubuntu/notebooks/Untitled0.ipynb
ubuntu@ip-REMOTE-IP:~$ 

本地仓库中有大约12个*.ipynb文件没有被推送。我相当确定这是一个概念问题而不是语法问题,但我已经阅读并反复阅读了O'Reilly Git书籍中的远程章节,但我还是束手无策。

2个回答

5
除非您通过其中一个钩子脚本明确告诉它,否则 git push不会更新远程端的工作目录。通常,如果您在远程端检出的分支是您正在推送的分支之一,它会大声抱怨并拒绝推送。但是,可以禁用该警告,使您能够推送,但它仍然不会更新工作目录。您可以在远程存储库中运行 git reset --hard HEAD (或 git checkout master 或类似操作),或设置一个 post-receive 钩子来为您完成此操作或其他操作。不过,最好让远程存储库是裸的 - 可能引入第三个存储库,以便您的开发存储库可以将代码推送到那里,并且您的生产存储库可以从其中拉取。
编辑:好的,现在这是一个不同的问题,因为您提到您的远程存储库是使用--bare创建的。如果您的远程存储库是裸的,那么您不应该期望以“正常”的方式在那里看到您的文件,因为裸存储库没有与其关联的工作目录。相反,您将看到一些子目录(如brancheshooksinfoobjectsrefs)和文件(configdescriptionHEAD),这些通常是在非裸存储库中的.git下看到的。但是,您仍然应该能够运行 git log 和其他命令(如 git show HEAD: <some_file> )来验证您的数据是否存在。

比我的解释更完整,包括非裸库和裸库。+1 - VonC

1

git status

git status
# On branch master
nothing to commit (working directory clean)

如果它列出了修改过的文件,你需要先添加并提交这些文件,然后再进行推送:
git add .
git commit -m "my commit message"
git push -u  nbcsm master 

此外,请确保检查服务器端检出的分支:
cd /home/ubuntu/notebooks
git branch

如果没有警告,你不应该能够推送到非裸仓库。
但由于你没有收到警告,可能是因为另一个分支被检出了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接