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