在www.hostingcompany.com/~/mysite.com上维护源代码的Git策略是什么?

时间:2011-04-18 13:43:45

标签: git

这与Cannot git clone a folder on a server and then edit and git push?

有关

让我们假设托管公司是www.hostingcompany.com

当我ssh到它时,我在~,我会看到

~/mysite.com
~/any_other_folders

版本控制~/mysite.com中的所有源代码以及能够git clone到本地PC的Git工作流程是什么?所以我可以在本地进行修改,然后发出一行并推送到repo并让~/mysite.com上的所有代码保持最新状态?

使用git repo,然后sftp从本地PC到~/mysite.com一个好方法?我不喜欢这样做,因为很难看出是否所有内容都是同步的。

1 个答案:

答案 0 :(得分:2)

直接从您已经获得答案的related question复制答案:

您有两种选择:

  1. 创建一个裸存储库(mysite.com.git)和一个非裸存储库(mysite.com)。在裸存储库中,向post-update

    添加git --git-dir=.../mysite.com pull挂钩

    请注意,您可能希望通过克隆带有-s标志的裸存储库来创建非裸存储库,或者之后设置.git/objects/info/alternates以避免复制所有数据。

    < / LI>
  2. 只创建一个存储库并且:

    1. 脱头:git checkout master@{0}

    2. post-update

    3. 添加git merge master挂钩

      这里的原因是git拒绝修改签出分支,但是如果你取消选中分支,你就可以推送。并且您将能够从钩子更新工作目录(钩子是放置在存储库中的hooks目录中的脚本)。你可以创建一个单独的分支并检查它,或者你可以使用&#34;分离的HEAD&#34; state(如上所述-git通过一个特殊的引用来记录检出哪个分支&#34; HEAD&#34;指向分支,但是如果你检查出某个东西,那不是分支,那么它就是指向直接修改,并且它被称为&#34;分离的分支&#34;并且因为没有分支被检出,所以允许你推送到任何分支。)

    4. 只创建一个存储库并且:

      1. 关闭按下检出分支检查。

      2. post-update添加git reset --hard挂钩,以便在推送时重新检查分支。

      3. 此选项仅对只读访问有效,因为每次推送时挂钩都会丢弃任何本地更改。

        如果它只是检查并以只读方式访问,第二个选项稍微高效一点,但是如果你在工作目录上运行其他一些命令,那么第一个更安全(你可以擦除并重新启动) - 创建工作副本而不必担心主要的回购)。另请参阅this question

        修改:添加了第三个选项。