鍍金池/ 問答/Linux  網(wǎng)絡(luò)安全/ 如何 git 後直接傳到遠(yuǎn)端目標(biāo)?

如何 git 後直接傳到遠(yuǎn)端目標(biāo)?

我在linode建立了php, apache等等,就是網(wǎng)頁需要用到的環(huán)境都建立好了,我個人也有用git版控,傳到bitbucket?,F(xiàn)在有個問題,我想讓他同時upload到我linode的apache var/www/html 目錄!

回答
編輯回答
哚蕾咪

方案1, 用post-update勾子

使用下面的post-update文件:
將您的.git目錄復(fù)制到 web 服務(wù)器上
在本地副本中, 修改.git/config 文件并將 web 服務(wù)器添加為遠(yuǎn)程:

[remote "production"]
url = username@webserver:/var/www/html/.git

在服務(wù)器上, 用下面的文件替換.git/hooks/post-update

添加對文件的執(zhí)行訪問權(quán)限 (再次, 在服務(wù)器上):

chmod +x .git/hooks/post-update

現(xiàn)在, 只需在本地推送到您的 web 服務(wù)器, 它應(yīng)該自動更新工作副本:

git push production
#!/bin/sh
#
# This hook does two things:
#
#  1. update the "info" files that allow the list of references to be
#     queries over dumb transports such as http
#
#  2. if this repository looks like it is a non-bare repository, and
#     the checked-out branch is pushed to, then update the working copy.
#     This makes "push" function somewhat similarly to darcs and bzr.
#
# To enable this hook, make this file executable by "chmod +x post-update". 
git-update-server-info 
is_bare=$(git-config --get --bool core.bare) 
if [ -z "$is_bare" ]
then
      # for compatibility's sake, guess
      git_dir_full=$(cd $GIT_DIR; pwd)
      case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
fi 
update_wc() {
      ref=$1
      echo "Push to checked out branch $ref" >&2
      if [ ! -f $GIT_DIR/logs/HEAD ]
      then
             echo "E:push to non-bare repository requires a HEAD reflog" >&2
             exit 1
      fi
      if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
      then
             wc_dirty=0
      else
             echo "W:unstaged changes found in working copy" >&2
             wc_dirty=1
             desc="working copy"
      fi
      if git diff-index --cached HEAD@{1} >/dev/null
      then
             index_dirty=0
      else
             echo "W:uncommitted, staged changes found" >&2
             index_dirty=1
             if [ -n "$desc" ]
             then
                   desc="$desc and index"
             else
                   desc="index"
             fi
      fi
      if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
      then
             new=$(git rev-parse HEAD)
             echo "W:stashing dirty $desc - see git-stash(1)" >&2
             ( trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
             git-update-ref --no-deref HEAD HEAD@{1}
             cd $GIT_WORK_TREE
             git stash save "dirty $desc before update to $new";
             git-symbolic-ref HEAD "$ref"
             )
      fi 
      # eye candy - show the WC updates :)
      echo "Updating working copy" >&2
      (cd $GIT_WORK_TREE
      git-diff-index -R --name-status HEAD >&2
      git-reset --hard HEAD)
} 
if [ "$is_bare" = "false" ]
then
      active_branch=`git-symbolic-ref HEAD`
      export GIT_DIR=$(cd $GIT_DIR; pwd)
      GIT_WORK_TREE=${GIT_WORK_TREE-..}
      for ref
      do
             if [ "$ref" = "$active_branch" ]
             then
                   update_wc $ref
             fi
      done
fi

方案2,用rsync

git ls-files -z | rsync --files-from - --copy-links -av0 . user@server.com:/var/www/project

原文參考:
https://stackoverflow.com/a/3...

2018年8月16日 11:40
編輯回答
別傷我

是想搞devops?

可以用 JenKins 來搞,添加一個監(jiān)控git的任務(wù),再寫個upload的腳本就行。
JenKins 任務(wù)流程:

  1. push 到 git
  2. JenKins 監(jiān)測到 git 更新
  3. 服務(wù)器 pull git
  4. 觸發(fā)腳本(復(fù)制到 var/www/html 目錄)

具體可參考:https://yq.aliyun.com/article...

2017年7月20日 01:50