V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
run2016
V2EX  ›  问与答

CentOS 上搭建了一个 git 服务器,代码推送的诡异问题。

  •  
  •   run2016 · 2017-08-20 14:14:43 +08:00 · 3086 次点击
    这是一个创建于 2653 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近搞了一个 django 网站的小 demo,想着把他放到新买的 digital ocean 的 vps 上去。于是在上边搭了一个 git 服务器,一切正常。

    由于本地机器(Sierra)上的项目是有 commit 记录的,之前未与任何远端服务器建联。我想保存这些记录,推到线上去。把他推送到 centOS 7 的 vps 上,成功后我去一看,原来就仅仅是把我项目中的.git 文件夹推送上去,而其他的文件都没有上去。

    于是我又随意新增了几个文件,多搞几个 commit,再推,发现每次还是只把我的.git 文件夹推上去。 不知道哪里出了问题?

    我试着用一模一样的办法,在 github 上新建了一个 repo,建立联系后往上推,却是很顺利的将所有文件都推过去了。

    一样的方法,只是服务器不同,为什么会出现这种问题呢?

    这样的问题如何解决呢? 谢谢各位前辈

    第 1 条附言  ·  2017-08-22 19:51:20 +08:00
    问题已解决,谢谢各位前辈。
    @msg7086 说的是对的,我之前没有理清这个关系
    谢谢 @AntonChen @FPGA @Loyalsoldier @vacker 帮我找到了解决方法。
    不甚感激
    O(∩_∩)O~
    12 条回复    2017-08-21 09:26:18 +08:00
    fcka
        1
    fcka  
       2017-08-20 14:33:31 +08:00 via Android
    并没有说用的何种程序做的服务端……
    Pastsong
        2
    Pastsong  
       2017-08-20 14:39:07 +08:00 via Android
    服务端是裸库啊...是只有.git 的
    AntonChen
        3
    AntonChen  
       2017-08-20 14:40:09 +08:00 via iPhone   ❤️ 1
    你需要在服务器上克隆检出
    run2016
        4
    run2016  
    OP
       2017-08-20 14:44:07 +08:00
    @fcka yum install git 这种的。。
    run2016
        5
    run2016  
    OP
       2017-08-20 14:46:20 +08:00
    @Pastsong 嗯 我在本地仓库已经有很多 commit,想推到线上去呀。
    @AntonChen 克隆检出之后,我本地的 git 仓库是不是就派不上用场了。。。 我还想保留原来的 commit 记录呀。
    fcka
        6
    fcka  
       2017-08-20 15:23:54 +08:00 via Android
    没用过裸的 girt server,不过 .git 文件夹才是本体,文件只是 .git 文件夹中某一个 commit 指针位置的表示而已,你可以自己 checkout 吧…
    microhz
        7
    microhz  
       2017-08-20 16:32:33 +08:00
    你都 push 到 Github 了,直接在 vps clone 下来试试
    FPGA
        8
    FPGA  
       2017-08-20 16:41:47 +08:00   ❤️ 1
    给服务器 git 目录加个钩子,`.git/hooks` 目录新建 `post-receive` ,注意给执行权限
    ```sh
    #!/bin/sh
    DIR=`cd $(dirname $0); pwd`
    WORKING="$DIR/../../"
    GIT="$DIR/../"

    git --work-tree=$WORKING --git-dir=$GIT checkout -f
    ```
    msg7086
        9
    msg7086  
       2017-08-20 17:36:12 +08:00   ❤️ 1
    > "却是很顺利的将所有文件都推过去了。"

    说得好像你能登录进 Github 服务器看文件列表似的。

    推送本来就是在.git 里,这是保存了你 Repo 所有数据的数据库,要推的话永远就只会推.git ,不会推别的东西。
    你所有的文件,所有的提交记录,所有的分支和标签,都在.git 里。

    > "于是在上边搭了一个 git 服务器"

    前后完全矛盾。
    如果要在你服务器上拉取网站程序,你需要在上面搭一个 git 客户端。
    如果希望 push 的时候签出网站程序,你需要在 git 服务器里写一个脚本,连上网站服务器然后拉取网站程序。
    记住,git 服务器是 git 服务器,网站服务器是 git 客户端。
    Loyalsoldier
        10
    Loyalsoldier  
       2017-08-20 19:17:10 +08:00   ❤️ 1
    8 楼应该是对的。裸 Git Server 需要 Git Hook 自动检出
    vacker
        11
    vacker  
       2017-08-20 20:50:09 +08:00 via Android
    相信我,你需要这篇文章 https://tzwe.com/post/git-web.html
    jinhan13789991
        12
    jinhan13789991  
       2017-08-21 09:26:18 +08:00
    你需要 docker+gitlab、
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2835 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:40 · PVG 17:40 · LAX 01:40 · JFK 04:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.