zoukankan      html  css  js  c++  java
  • git学习笔记

    以前都是直接用Github for windows图形客户端来上传代码,并不了解git的命令,也远没有发挥出git应有的威力。如今在做一个CMS的项目,最后需要将其部署到远端服务器上,而经过前端工程化思想的洗礼之后,我已无法忍受手工传文件到服务器的"FTP部署法",因为这样原始低效易出错,且严重不利于维护更新。本着能自动化就自动化的精神,我开始研究用git来部署网站的方法。
    学习资料链接:http://blog.jobbole.com/78960/
    git仓库(repo)是指存放项目文件的目录,这个目录下有一个.git隐藏文件(如果没有,用git init生成),里面是用于版本管理的相关文件,别乱动。
    .git是版本库,其中最重要的是stage(暂存区),还有git自动创建的分支master,以及指向master的一个指针HEAD。
    进入暂存区的文件被暂时“锁定”等待提交,文件在加入暂存区之后发生的变动不影响暂存区,提交以暂存区版本为准。
    注意:命令里可以使用通配符*?等。
    常用命令
    git init 初始化版本库(--bare 生成裸库,即只有记录版本库历史信息的文件,而没有实际项目源文件的拷贝)
    git add [file]:将文件添加到暂存区等待提交。文件被添加暂存区后所发生的变动将不被提交,除非重新添加一次。
    git commit -m [message]:将暂存区的文件提交到HEAD指向的当前分支上
    git diff [file]:查看文件相对于分支上的变动
    git status [file]:查看文件状态
    git checkout -- [file]:用暂存区文件覆盖工作区文件,相当于丢弃上次add以来的变动。git checkout . 表示用暂存区的所有文件覆盖工作区文件。
    git log 查看提交日志
    git reflog 查看最新动作日志
    git reset --hard [版本号] 恢复指定版本
    git reset -hard HEAD^ 恢复到上一个版本(一个^表示一个版本,或者用~[数字]表示回退版本数)
    分支策略
    一般master分支是最稳健的,用于发布新版本,不能在上面干活,干活都应该在别的分支上,干完再合并到master。
    git branch [branch] 创建新分支
    git checkout [branch] 切换到指定分支(带上-b参数表示同时创建新分支)。切换分支后,仓库里的文件内容会变到与当前分支相同。
    git merge [branch] 将指定分支合并到当前分支。当合并分支与当前分支有冲突时,git会在合并后的文件中标注出来,须手动消除冲突后再提交一次。
    git branch -d [branch] 删除指定分支
    git stash 隐藏当前分支的工作现场,比如工作进行到一半时无法提交,但必须切换分支,此时可使用这个命令。
    git stash list 列出被隐藏起来的工作现场
    git stash apply/drop 恢复现场/...并删除隐藏的工作现场
    远程操作
    git remote 查看远程库信息(参数-v查看详细信息)
    git remote add [remote branch] [server]:在远端服务器上克隆本地仓库,远程库名默认为origin
    git push [remote branch] [branch]:将分支推送到远端仓库(第一次推送时在push后面加上-u参数)
    git clone [remote address]:将远端(Github)的仓库克隆到本地,git自动将本地master和远程master对应起来
    策略:哪些分支需要推送?
    1. master是主分支,需要时刻与远程同步
    2. 开发分支不需要推送到远程,可以合并到master之后再推送
    git pull 从远程拉取分支到本地
    git branch --set-upstream-to [local branch] origin/[branch] 关联本地分支与远程分支
     

    多人协作工作模式一般是这样的:

    1. 首先,可以试图用git push origin branch-name推送自己的修改.
    2. 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
    3. 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。

    附:利用git向服务器部署Node.js项目代码的方法:

    1. 在服务器上创建项目目录,初始化为git仓库:git init,配置为允许接收代码提交:git config receive.denyCurrentBranch ignore
    2. 在本地项目创建远程分支:git remote add 远程分支名 ssh://用户名@远程地址/项目路径/.git
    3. 将项目的master分支push到服务器上:git push 远程分支名 master
    4. 到服务器端git staus,会发现暂存区内一堆的反操作(例如将本来应该保留的文件delete掉)。此时先更新再检出代码 git update-server-info、git checkout -f,效果是将所有文件还原到最后一次commit的版本,暂存区内的修改被丢弃。
    5. 然后npm install补上node_modules就可以了!
    6. 服务器端添加自动更新钩子脚本:1)cd .git/hooks;2) 新建 post-receive 或将 post-receive.sample 重命名为 post-receive;使用post-update也可以, 不过需要先将post-update中的exec git update-server-info这一行删掉;3)vim post-receive,将如下内容复制到文件中
      • #!/bin/sh
      • unset GIT_DIR
      • cd ..
      •  git checkout -f
    7. 安装pm2来守护网站
    8. 在Linux系统下监听低于1024的端口,需要root权限,为此用一个变通的办法,即利用ip表设置80端口的信息与3000端口互相转发,此转发在网卡层面,性能很高。方法如下:
      1. 输入sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
      2. 切换到root用户
      3. 输入iptables-save>/etc/iptables-rules
      4. 编辑/etc/network/interfaces文件,在最后一行插入:pre-up iptables-restore</etc/iptables-rules,实现开机自动配置
  • 相关阅读:
    使用一个Python脚本来运行一个简单的Django项目
    创建第一个Django项目
    Windows下安装Python3和Django
    node.js使用node-xlsx读写数据
    U盘分区后合并
    linux命令学习-3-sysctl
    linux命令学习-2-dmesg
    linux命令学习-1-less
    在服务器上排除问题的头五分钟
    c++读取REG_MULTI_SZ类型注册表
  • 原文地址:https://www.cnblogs.com/leegent/p/5612540.html
Copyright © 2011-2022 走看看