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://[email protected]': # 輸入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中 [email protected]: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/WuPeiqi/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.jsonView Code