2012-11-23 44 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