git与GitHub那些事儿(三)

Git与GitHub交互操作

git 直接无法创建仓库,必须先在GitHub上创建好仓库,拿到仓库URL地址然后使用git远程操作

git可以是用该URL进行向远程推送版本信息或获取版本信息,如下图机制:

git操作GitHub

git远程基本流程

在公司:

git remote add origin https://github.com/Hydrostaticwater/maoyam.git   # 为地址起一个别名origin
git push origin master                                                 # 将本地master分支内容以及版本信息推送到GitHub
Username for 'https://github.com':                                     # 输入GitHub用户名
Password for 'https://Hydrostaticwater@github.com':                    # 输入GitHub密码
git push origin first              # 将本地first分支内容以及版本信息推送到GitHub

在家:

git clone https://github.com/Hydrostaticwater/maoyam.git       # 将项目从GitHub中获取
git Branch                                                     # 可以查看默认获取到得只有master分支
git branch first origin first                                  # 创建first分支与远程first分支同步
git checkout first                                             # 切换到first分支   
vim maoyam.py                                                  # 继续开发新功能
git add .                                                      # 添加文件到版本库的暂存状态
git commit -m '新功能开发'                                       # 提交新功能到版本库的分支
git push origin first                                          # 提交first分支内容到远程GitHub托管仓库的first分支

在公司:

git checkout first              # 切换到first分支
git pull origin first           # 从远程GitHub仓库获取first分支最新内容,并合并到本地
vim maoyam.py                   # 继续开发新功能
git add .                       # 添加文件到版本库的暂存状态
git commit -m '新功能开发1/3'     # 提交新功能到版本库的分支

在家:

git checkout first                # 切换到first分支
git fetch origin first            # 从GitHub仓库获取first分支最新内容到版本库的分支
git merge origin first            # 将版本库的分支内容合并到工作区
vim maoyam.py                     # 继续开发新功能
git add .                         # 添加文件到版本库的暂存状态
git commit -m '新功能开发2/3'       # 提交新功能到版本库的分支

长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

Git配置

Git的配置文件有三个:

  • 系统配置: /private/etc/gitconfig
  • 用户配置: ~/.gitconfig
  • 项目配置:.git/config

用户凭证

由于Git和Github交互操作可能会很频繁,那么一定少了用户授权的操作,为了防止每次操作重复输入用户名和密码,Git提供了两种解决方法:

  • 秘钥
    首先创建一对秘钥  ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
    注意:这种方式需要使用GIt中 git@github.com:hydrostaticwater/xxxxx.git 格式地址。
  • 密码
    Https访问git时,避免每次操作需要输入用户名和密码,可以在配置文件中添加如下配置项:
        [credential]
        helper = store/cache/第三方

    store:
            表示将用户名和密码保存在硬盘上
            第一次输入过用户名和密码之后,用户名和密码就会保存在当前用户根目录的 .git-credentials 文件中,内容格式为:https://用户名:密码@github.com

            自动添加配置命令:git config credential.helper store
    cache: 
            表示将用户名和密码保存在缓存中
            第一次输入过用户名和密码之后,用户名和密码就会保存在缓存中,默认超时时间是 900 秒,缓存相关文件保存在当前用户根目录的 git-credential-cache 中 
            自动添加配置命令:
                   git config credential.helper cache
                   git config credential.helper 'cache --timeout=300'

    相关操作:
            清除缓存:git credential-cache exit 
            指定超时:
                [credential]
                helper = cache --timeout=300
    注意:
             这种方式需要使用GIt中 https://github.com/hydrostaticwater/xxxx.git 格式地址。
             指定用户名和密码: https://用户名:密码@github.com/hydrostaticwater/xxx.git 

版本相关:

git tag -a v1.0 -m '版本介绍'        本地创建Tag
git show v1.0                       查看
git tags -n                         查看本地Tag
git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配
git tag -d v1.0                     删除Tag
git push origin :refs/tags/v0.2     更新远程tag
git checkout v.10                   切换tag
git fetch origin tag V1.2

git push origin  --tags
git pull origin  --tags
    
git clone -b v0.1

.gitignore文件

以斜杠“/”开头表示目录;

以星号“*”通配多个字符;

以问号“?”通配单个字符

以方括号“[]”包含单个字符的匹配列表;

以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
# Byte-compiled / optimized / DLL files
 
# pycharm
.idea/
.DS_Store
offline-script/
media/
 
# database migrations
*/migrations/*.py
!*/migrations/__init__.py
 
 
__pycache__/
*.py[cod]
*$py.class
 
# Django stuff:
*.log
local_settings.py
*.sqlite3
 
 
# C extensions
*.so
 
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
 
# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
 
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
 
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
 
# Translations
*.mo
*.pot
 
 
# Flask stuff:
instance/
.webassets-cache
 
# Scrapy stuff:
.scrapy
 
# Sphinx documentation
docs/_build/
 
# PyBuilder
target/
 
# Jupyter Notebook
.ipynb_checkpoints
 
# IPython
profile_default/
ipython_config.py
 
# pyenv
.python-version
 
# celery beat schedule file
celerybeat-schedule
 
# SageMath parsed files
*.sage.py
 
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
 
# Spyder project settings
.spyderproject
.spyproject
 
# Rope project settings
.ropeproject
 
# mkdocs documentation
/site
 
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
View Code

 

posted @ 2018-12-16 21:50  樵夫-justin  阅读(248)  评论(0编辑  收藏  举报