Git--- Github


Git基礎

什么是git?

git是一個版本控制系統,也可以說當你的代碼發生變化進行管理的工具.在git出現之前這樣的工具SVN,CVS.

git和github的區別,

簡單來說,git是一個版本控制的工具,github是一個代碼托管平台,一個代碼倉庫.

用git管理項目

首先進入項目目錄,啟動git--->Git Bash Here,這樣就開啟了git管理系統啟動了一個git圖形界面,執行 $ git init . 初始化,在項目中便形成了一個.git的目錄 然后通過一系列命令進行版本控制。

注意:項目內容在沒有被管理的時候status為紅色,被管理后為綠色!

#開始管理項目(基礎3步走)

git init .    #首先初始化,生成 .git目錄

git add .      #將整個項目管理起來

git commit -m  "項目01版本"  #"項目的01版本"當然執行的時候可能會報錯,需要配置下git config 

"""
執行這兩條命令配置郵箱和名稱
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
"""

 

git分區

工作區: 項目中當前的編輯位置.

緩存區:git add 之后的區域,將文件放在緩存區.

版本庫:commit之后的區域就是版本庫.

git常用命令

git init .        # 初始化
git add .      # 將工作區的所有文件添加到緩存區
git commit -m “提交信息”   #將緩存區的內容添加到版本庫,注意:"提交信息"寫的越詳細越好!方便后期管理
git status                           #查看當前的狀態

git reset --hard  hash值     #回退到指定的版本,這里的hash值就是每次commit的時候都會生成一個類似md5值的字符串,例如 "9d2aaf3ea89a9e6b8d8050a6d1a730f6bb4a0d85"

git checkout -- file(指定文件)        # 將文件回滾到最近一次提交的樣子    該命令比較危險在不確認文件用途的時候慎用!!!


git log                          # 查看當前位置之前的提交記錄
git log -p 文件       #指定版本庫的區別
git log pretty=online     #將commit過的值 版本庫信息全部顯示
git log --pretty="format:%an %h %T %ar"   #格式化顯示版本庫信息  例如%an  作者名稱  %h 用戶簡短hash值 %ar修訂日期 %T樹狀顯示

git reflog                      #查看所有的記錄(只要提交過的記錄就能查到)

git reset HEAD file      # 將文件從緩存區拉取到工作區

git diff     對比文件                # 對比工作區和緩存區
git diff --cached    對比文件      # 對比版本庫和緩存區

 

git-快照

git stash    #將當前內容創建一個快照,並回到最后一次提交的位置,前提是有改變的情況下
git stash list  #查看快照列表

git stash pop  回到快照位置,並刪除這個快照  相當於以下兩條命令集合
git stash apply   #回到快照
git stash drop    #刪除快照

 

git-分支

分支的作用就是用於團隊協同開發,這樣代碼就會出現較大分歧。這時候就需要用到分支了,不同的任務組在不同的分支上開發,互相之間不會影響。git分支的特性和BUG修改都在不同的分支上進行開發和測試。這樣規范了整個軟件的開發流程。分支之間的互不影響這種特性可以增加團隊合作的效率。GIT分支的另外一個重要特性就是可以合並不同軟件倉庫(fork)的分支。

注意點:一般來說禁止在master分支上修改,因為master為線上代碼,一旦出現問題,會產生嚴重的后果.基本上在dev分支上修改

#分支的常用命令
git branch  name   #創建一個分支
git branch             #查看分支列表
git checkout name   #切換分支
git branch -d name   #刪除指定分支

git checkout -b name   #在當前分支的基礎上 創建並切換一個分支

git merge master bug    #將這兩個分支合並

 

沖突

#下面這種情況就表示出現了沖突
Auto-merging templates/car.html
CONFLICT (content): Merge conflict in templates/car.html
Automatic merge failed; fix conflicts and then commit the result.

<<<<<<< HEAD
    <li>蘭博基尼2/3</li>
=======
    <li>蘭博基尼1/2</li>
>>>>>>> dev1

Auto-merging templates/car.html
CONFLICT (content): Merge conflict in templates/car.html
The stash entry is kept in case you need it again.

 
<<<<<<< Updated upstream
<li>奇瑞瑞虎7</li>
=======
<li>奇瑞瑞虎</li>
>>>>>>> Stashed changes

#分支和dev1同時改動同一個文件相同的地方,合並的時候git無法處理,產生沖突,需要人為解決
#創建快照之前,將li標簽改為奇瑞瑞虎,當創建快照后然后在將li標簽改為奇瑞瑞虎7,當執行刪除快照 git stash pop 的時候就會產生沖突,需要手動選擇解決

 

Github托管代碼

將代碼上傳github

1.先創建一個倉庫,選擇公開和私有隨意.

#上傳操作
git remote add origin https://github.com/liuxiaofei1071/shop.git     #將自己github url地址重命名為origin  
git push origin master   #此時上傳master分支代碼到github的coco倉庫 ,如果沒登錄Github就需要進行登錄

 

2.這樣只能上傳master分支,如果是多分支的話

git push origin dev   #傳dev分支到github

git push origin dev1   #傳dev分支到github

將從github代碼拉取到本地

1.進入對應倉庫,如我的 liuxiaofei1010/shop,點擊Clone or download按鈕,復制github上的項目url,在git中執行對應的命令

#相關git命令
git clone github的url      #該命令就可以將代碼從github上拉取下來,但是僅限於master分支

#拉取其他分支代碼
git checkout -b dev origin/dev   #拉取dev分支
git checkout -b dev1 origin/dev1  #拉取dev1分支

兩台機器分別更改github代碼

#公司pc
git pull origin dev1    #將dev1分支代碼同步到機器dev1分支
#修改后
git push origin dev1   #將本地dev1分支代碼同步到github的dev分支

#home-pc
操作同上..

兩台機器分別更改代碼同一位置push異常

#錯誤信息
$ git push origin dev1
To https://github.com/liuxiaofei1071/shop.git
 ! [rejected]        dev1 -> dev1 (fetch first)
error: failed to push some refs to 'https://github.com/liuxiaofei1071/shop.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

#這就是所謂的提交沖突問題
#嚴格按照公司規定
1.每個人都用自己的分支,在自己的分支上提交
2.合並分支的時候人都要在,各自對自己的代碼負責
3.完成一個小功能合並一次(2-3)
4.一般組長來合並代碼
5.review
   組長
   帶你的人
解決提交沖突問題

 變基

#作用就是將多台機器push后的分支由曲線變為一條直線

git rebase   #變基  --雞肋 --治療強迫症 

給別人貢獻代碼

#加好友步驟
1.進入對方github所在項目 -->settings --->Collaborators
2.輸入對方username 添加對方,等待對方email驗證通過
3.方式一 : 通過后進入對方項目,拿到對方項目url,通過git clone 克隆,本地修改
3.方式二 : 個人用戶下拉框 settings --->Organizations --> 新建一個組織 --->設置組織名稱,郵箱 --->邀請成員 --->Continue --->Submit
github加好友
#給別人修改代碼
1. Fork --選擇自己/創建的組織
2. 本地進行修改即將改動的地方,
3.new pull request
4.等待對方確認即可
貢獻代碼

tags標簽 

一般在大項目開發完成或項目開發到一個里程碑的時候會打上標簽

#常用命令
git tag -a v1.0 -m "標簽信息"    #打造一個標簽

git tag   #查看標簽

git push origin --tags    #push到github

git tag -d v1.0   #刪除標簽

git push origin :refs/tags/v1.0   #推送一個空的標簽

忽略敏感信息 

例如不想被別人看到的信息 db 

#了解. gitignore文件

 

Gitpython

用python操作git

安裝模塊 gitpython

from git import Repo

repo = Repo("PATH")

repo.index.add()    #添加
repo.index.commit()   #提交
repo.index.checkout()    #回滾
repo.index.reset(commit=hash5,head=True)

repo.create_head()  #創建分支
repo.create_tag()    #創建標簽
repo.branches()   #獲取所有的分支

r = git.Repo.clone_from(url,to_path)    #克隆
r.remote()
r.pull()
r.push()

g = git.Git(PATH)
g.add()
g.commit ("-m ")

 

 

 

 

 

 ...待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM