標籤:

git clone和 git pull 操作都正常,但是不能push,這是為什麼?

我註冊了一個github帳號,自己的機器上也生成了ssh key ,並配置到了github上。後來我從github上找了一個開源項目,git clone git@**.git 是正常的,項目正常clone下來了,然後我本地新建一個分支branchA,做了一個pull操作:git pull origin master,從遠程master分支上pull代碼也是正常的,後來我想測試一下向遠程推送代碼,於是我在新建的branchA分支下做了個無關痛癢的改動,然後git add . --&> git commit -am "xxx" ,git push origin branchA,這時提示: Please make sure you have the correct access rights and the repository exists.

不知道這是為什麼?請高手解答啊!


完全正常啊,對於別人的項目你只能 pull 不能 push,只有你自己的項目才能 push。或者說只有你把 ssk key 添加到賬號里才能無密碼 push。

如果你想參與別人的開源項目,先建立自己的 github 賬號,然後 fork 那個項目到自己的賬號里,然後在自己的項目里修改,然後發出 pull request,然後看對方願不願意接受你的提交。


"後來我從github上找了一個開源項目" 重點在這一行。

舉個栗子:

你在大家上隨便找了個人,看人家的衣服很漂亮。你按照別人的衣服樣式,自己複製了一份(clone),別人既然穿出來了,就不怕他人抄。

過了一段時間,人家覺得有些地方不夠美觀,進行了一些改動,然後再次穿到自己身上秀出來了(push)。

這個時候你仍然可以將新改動的部分再次抄過來(fetch),然後合併到你的衣服上(merge)。這兩步可以合併為一步,即pull

後來,你覺得衣服的有些部分不夠美觀,如你想把長袖改成短袖。沒問題,你自己改,改完後穿上(commit)也覺得很美,你想「既然這麼美,要不把改動也告訴給別人吧」,然後你duang就想上前拉住別人,「來來來,看看我的改動好不好」。別人肯定會想「你誰啊?有病吧?

問題出現了,如果你本身是一個很牛X的服裝設計師,看到有些人的衣服設計的實在是太爛,完全看不下去了,你下定決心,「我要更漂亮、更實用、更節能」。那麼怎麼辦?

第一步:要先知會(fork)一下對方,「我要針對你的設計進行調整了

第二步:你仍然需要先複製(clone)一份,你肯定不能直接在別人身上改動吧

第三步:修改完成後,需要自己先上身(commit)看看效果

第四步:如果對於改動滿意,那麼好,這個時候就可以告知(push)對方,"我剛才說要對你的設計進行修整,現在是修整後的效果,你看看,滿意否?"

當然,這個時候,對方是不是接受,那就看人家具體的意願啦。

=====================================================================

所以,我的理解是,如果你想push,請先fork如果只是拿來主義,那麼直接clone然後pull就可以了

這個設計理念應該是包含了人與人直接最基本的一個尊重


clone下來的project中origin默認內容是該project在伺服器端的目錄,你是沒有許可權往別人的project里直接push commit的。可以用git remote -v查看origin的內容,如果只是為了測試push的話,你可以在本地目錄用git init --bare創建一個裸倉庫模擬伺服器。然後往裡面push。例子;

cd

mkdir server

cd server

git init --bare

cd ..

git clone git://xxxx/yyyy client

cd client

git remote -v

git remote rm origin

git remote add origin ~/server

git remote -v

git push origin HEAD:master

git clone ~/server copyFromServer -b master

cd copyFromServer

ls


就跟有些目錄讓讀不讓寫是一個道理


因為你沒有fork


推薦閱讀:

git是什麼?github又是什麼?他們都有什麼用啊?
一入前端深似海,從此紅塵是路人系列第十彈之如何合理利用Git進行團隊協作(一)
【開源必備】常用git命令
如何在Linux上搭建一個Git中央倉庫

TAG:Git | GitHub |