2012-11-23 63 views
15

什麼是git init準確?我必須每臺計算機執行一次,或者每個使用git的項目執行一次?我下載了我的項目git clone並得到它的工作,但現在它存儲我的項目也C:/Users/myUser/git,是某個文件夾或我可以改變它?瞭解git init

我對這個文件夾並不十分了解,它似乎像是一個本地git倉庫或其他什麼東西,但是什麼「管理」它,或者它爲什麼使用這個路徑,你能解釋一下嗎?

這是我的理解,解決我,如果我不正確,需要得到澄清事實:

  1. git init是每一個項目
  2. 「用戶」下的git的文件夾是本地回購,每次我做git commit,該文件夾被更新。
  3. 當我做git push時,它從本地回購,並放到遠程存儲庫。
  4. 當我想更新爲「頭」,我只是做git pull

回答

30

這實際上是很多問題和誤解。我不確定我是否能夠解決所有問題,因此我只想解決直接問題。

  1. 混帳,init是每個項目

    幾乎是正確的。 git init用於在不屬於git的項目中使用git。對於已經在git下的項目,您可以使用git clone

  2. 的git的文件夾下的 「用戶」 是本地回購

    幾乎是正確的。該文件夾實際上是.git而不是git。這來自unix約定,所有以點開頭的文件和文件夾都被認爲是隱藏的。

    其次,該文件夾不在您的用戶文件夾下。它在你的項目文件夾下。所以文件夾C:/Users/myUser/是一個項目。如果這不是你的意圖,那麼你很可能在用戶文件夾中意外執行了git init

    每個項目在項目的根目錄中都有一個.git文件夾,這是該項目的存儲庫。這是git與svn或cvs相比如此之快的原因之一 - 整個系統信息庫都在本地硬盤上處理,沒有任何網絡流量。

  3. 當我做混帳推,就從本地回購需要,並提出到遠程

    正確的,但只適用於有遙控器的回購協議(通常是您使用git clone複製創建回購一個遠程回購)。

    請注意,遠程回購不需要在另一臺機器上。您可以將本地文件夾中的項目克隆到另一個文件夾中,然後可以將更改從新文件夾推送回原始文件夾。

    git clone命令會自動爲您的存儲庫設置必要的配置以連接回遙控器。但是,您也可以手動配置使用git init連接到遠程設備的回購。

  4. 什麼是 「管理」 它

    .git文件夾管理項目的回購協議。 Git不能作爲服務器運行*。相反,.git文件夾充當您所有git命令進行通信的本地「服務器」。基本上,運行git命令編輯.git文件夾的內容。

    *注意:遠程回購可以運行服務器,以便連接到它們。但從技術上講,它們並不是真正的git服務器。它們是git可以從其下載並上傳到的文件服務器。

+0

所以,當我在我的項目文件夾,寫'混帳commit',那麼我的新的數據傳輸到'.git'文件夾,這也是在我的項目文件夾?或者它在哪裏提交文件,因爲'git push'會將它發送到外部回購站。 – Jaanus

+0

@Jaanus:沒錯。 'git commit'在你的'.git'文件夾中保存最近從staging到HEAD的變更集。 'git push'將遠程回購與'.git'文件夾同步,而'git pull'同步您的'.git'文件夾和遠程回購。 – slebetman

3

你四個如何認識都或多或少正確的,但是你錯過了幾個細節。

git init初始化(即創建)存儲庫。每個項目應該位於其自己的存儲庫中。

如果您使用git clone下載了您的項目,那麼您不需要再次運行git init

您應該可以將您的項目複製到另一個目錄,而不會產生任何不利影響。該路徑可能是默認選擇的。一定要移動整個目錄。 git需要運行的元數據存儲在項目目錄中的隱藏文件中。

推拉可能會變得很複雜,尤其是當您與其他人一起開展項目時以及使用分支時。我在這裏寫出關於這個主題的完整介紹並不是很明智,所以我建議你閱讀Pro Git以獲得更全面的解釋。

2

git init僅用於從頭開始創建自己的新存儲庫。它將一個目錄變成一個空的git存儲庫。

當您使用git clone將現有存儲庫複製到新存儲庫時,git init既不必要也不需要。

-1
#!bin/bash 
DATE=`date +%m%d%Y.%H%M%S` 
TARGET="$1.$DATE" 
DIR=`pwd` 


function batch_convert() { 
for file in `ls $1` 
do 
if [ -d $1"/"$file ] 
then 
batch_convert $1"/"$file 
else 
dos2unix $1"/"$file 
#echo $1"/"$file 
fi 
done 
} 

################## 

echo $TARGET 
cd $DIR/DCW 
git pull 
cd ../ 
batch_convert DCW 
cp -R DCW tmp/$TARGET 
cd tmp/$TARGET 
find . -type d -name "*git*"| xargs -n20 rm -rf 



for db in `cat $DIR/tmp/$TARGET/Dblist` ; do 
     echo "********** DB IS $db *******" 
     for dbfolder in `find * -maxdepth 0 -type d` ;do 
    echo `ls -a` 
     echo "***** DBFolder is $dbfolder *****" 
    if [ ! $dbfolder = $db ];then 
    cp -R $dbfolder $db 
    find $db -name "*.ctl"| xargs -I '{}' mv '{}' $db/${db}.ctl 
    fi 
    done 
done 
cd ../ 
tar -cf $TARGET.tar $TARGET 
+0

這可能是一個很棒的答案,但沒有描述或評論我不知道這是什麼,也不知道它如何解決git問題。具體是這裏發生了什麼,爲什麼這個答案提交?非常感謝。 – zipzit