2013-03-16 105 views
0

我在Heroku上使用git,一切都很順利。現在我正嘗試在VPS服務器上使用git,但我無法使其工作。Git:如何開始通過ssh在遠程服務器上使用它回購

我在終端上通過ssh進行操作。這是一個rails應用程序。當我創建一個新的rails應用程序時,我做了git initgit add .並提交。在服務器上,我使用git init --bare創建了一個裸回購。當我試圖推動它時,它就會失敗。

然後我試圖手動上傳文件到服務器,創建一個存儲庫並在本地克隆它,但是當我在本地執行更改時,提交它並上傳它,它也會失敗。

我真的做了更多的事情,試圖自己弄清楚什麼是失敗。有很多不同的錯誤和不同的方式做它...我讀了不同的教程,甚至我自己的服務器提供商作爲一個我跟隨,並得到錯誤。

當我收到錯誤消息時,我試圖找到一個解決方案,但我最終無法進行推送。那麼,在某些情況下推動進展順利,但遠程回購似乎並沒有改變(並且在git push之後沒有錯誤)。

最近48小時我從字面上只是在試圖做這項工作的計算機上,每次重新開始並嘗試不同的事情。

我覺得有一次,我只是做一件正確的事。因爲我想,也許

$ git branch -r 
origin/HEAD -> origin/master 
origin/master 

$ git branch 
* master 

奇怪:剛過實現(也記不住步驟我跟着),這可能是一些使用不同的分支,因爲我做了,它看上去有點怪(對我來說)沒有列出相同的遠程和本地分支機構。

所以我的問題是真的如何啓動一個新的空白rails應用程序的git倉庫,並首次將所有東西上傳到我的服務器。不知道它是否重要,但我使用SSH從終端,服務器連接到服務器作爲Apache/Phusion Passenger。

我實際上所有谷歌的結果都是關於這個標記爲已訪問的,甚至大部分問題都在這裏涉及到我的問題。所以希望有人能告訴我正確的方法。

回答

1

不知道爲什麼它不爲你工作,但這裏的設置遠程回購的方式不同。

(以下是基於關閉的Chapter 4.2 of Pro Git,查看鏈接有關更詳盡的解釋。)

創建回購的「裸」的版本。從你的git倉庫的父目錄運行這個命令。

local$ git clone --bare my_project my_project.git 

複製純倉庫到遠程服務器。此示例將裸回購置於~user/git。現在

local$ scp -r my_project.git [email protected]:git 

應該從現有的存儲庫訪問通過從本地回購根運行以下命令:

local$ git remote add origin [email protected]:git/my_project.git 

,或者你可以克隆整個事情:

local$ git clone [email protected]:git/my_project.git 
+0

相同的結果。 git文件(在你的例子中是my_project.git)都很好地上傳到遠程服務器。但不是「真實」的文件; rails應用程序文件。奇怪的是,沒有錯誤消息,無論是使用這種方法甚至不是** GoZoner **也不是** janisz **之一。 – pzin 2013-03-16 19:58:49

+0

您將不會在裸回購中看到「真實」文件。只有存儲爲git對象。實際上,裸露的repo是.git目錄。如果您嘗試在本地其他地方克隆遠程回購(我的回答中的最後一個示例),那麼您的rails文件在那裏? – 2013-03-16 22:43:07

+0

嗯..所以我確實做得很對,一切正常,只是我不知道它是什麼?因爲遠程服務器上沒有文件並且沒有運行應用程序。 : - /現在可能對我的頭腦太多了。非常鬱悶。 – pzin 2013-03-16 23:02:05

1

你的腳步似乎也不錯,但我會爲他們提供一個更多的時間

[[email protected]] cd path/to/repo 
[[email protected]] git init --bare projekt 
[[email protected]] git push [email protected]:path/to/repo --all 
+0

感謝。試過你的推送方法,我得到了同樣的,沒有錯誤,但在遠程服務器上沒有文件。我意識到在這兩種情況下,在git文件夾中,他們都會在** objects **文件夾中創建大量文件。所以我認爲我做對了。 – pzin 2013-03-16 19:45:29

+0

因爲「裸存儲庫僅包含.git文件夾,並且沒有文件的任何工作副本」,所以[更多] [http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/ )所以只需在服務器上初始化正常的回購,並按[adviced]推送更改(http://stackoverflow.com/a/1764793/1387612) – janisz 2013-03-16 21:43:49

1

看起來你非常接近。在開發計算機上確保你有適當的遠程定義:

git remote add origin ssh://<username>@<hostname>[:<port>]/path/to/repo/dir 

並確保您的推包括分支爲:

git push origin master 

你會得到這樣的:

[email protected](21)$ git push origin master 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 207 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
To ssh://[email protected]<hostname>:2222/home/gozone/git/foo 
* [new branch]  master -> master 

我確切的過程:

$ mkdir /tmp/foo; cd /tmp/foo; touch foo.c; git init; 
$ git add .; git commit -m 'foo' 
$ ssh remote 
> mkdir ~/git/foo; cd ~/git/foo; git init --bare 
> ^D 
$ git remote add origin ssh://.../home/gozoner/git/foo 
$ git push origin master 

如果你再看一下遠程倉庫,在上例中的〜/ git/foo中,你只會看到.git這樣的文件。要獲取存儲庫內容,要運行您的rails應用程序,請執行克隆。

$ ssh remote 
> git clone ~/git/foo ~/rails/foo 
> cd ~/rails/foo 
> # your files are there; run web server 
+0

感謝您的幫助。那麼,我到了那裏。相同的消息(只是一些額外的增量壓縮消息)。但文件不在服務器上。在遠程機器上做'ls'(可以在/ home/newapp上說),我只是得到諸如分支,配置,描述等文件(似乎是我認爲它們應該在/ home/newapp/.git,但我只想按照你的步驟)。 – pzin 2013-03-16 19:33:50

+0

你看到的是'git init --bare'實際上是正確的。這些文件實際上並不存在;只有git的內容。如果你需要這些文件,那麼做一個克隆。注意:我做的是完全一樣的東西。我有幾個軌道開發 - 我在我的服務器主機上保留一個裸倉庫。在該主機上,我克隆存儲庫並從克隆中運行rails服務器。 – GoZoner 2013-03-16 20:08:01

+0

對不起,如果這個問題可能是明顯的(也許我太習慣heroku的git工作流了):如果我做了'git push',那麼文件不會上傳到遠程機器上?我是否需要在更改/提交時克隆文件?爲了確保克隆文件到服務器,我必須做'git clone user @ server:path/to/railsapp'? – pzin 2013-03-16 20:19:25

相關問題