尝试版本控制(git),我做得对吗?

时间:2011-12-18 17:04:15

标签: git version-control

我之前从未使用过版本控制,但我知道这是一个很好的做法,所以我决定尝试一下。我喜欢git,所以我正在使用它。我有一个本地Ubuntu服务器(单独的盒子),我在那里进行所有本地开发。

所以我安装了gitosis(遵循Ubuntu社区文档)并设置了所有爵士乐。

我的IDE是Eclipse,所以我安装了Eclipse EGit。

我将我的Apache docroot与Samba共享,所以在我的Windows PC(我开发的地方)上我只是将我的项目加载到Eclipse中并将它们直接保存到docroot(所以就像\ webserver \ www \ projectname是我的网络共享)。

所以我对Git的理解是我应该在/ srv / gitosis / repositories中创建我的存储库。但是当使用EGit时,它只是将存储库保存到/var/www/projectname/.git - 这是正常的吗?关于整个事情应该如何运作,我有点困惑。

2 个答案:

答案 0 :(得分:5)

首先,您不需要设置gitosis,Git非常灵活,我只需在服务器上创建一个目录并使用您的普通SSH凭据。

其次,GIT是分布式的,这意味着克隆项目的每个人都有完整的历史记录,这就是你看到.git目录的原因。要将它与ubuntu服务器一起使用,您应该添加一个遥控器。使用命令行中的Git的基本用法是这样的:

创建项目

user@local:~$ mkdir project
user@local:~$ cd project
user@local:~/project$ nano filename.py

使它成为一个git repo

user@local:~/project$ git init
user@local:~/project$ git add filename.py
user@local:~/project$ git commit -m "My first commit"

创建远程

user@local:~/project$ ssh ubuntu-server
user@ubuntu-server:~$ mkdir project.git
user@ubuntu-server:~/project.git$ cd project.git
user@ubuntu-server:~/project.git$ git init --bare
user@ubuntu-server:~/project.git$ exit

添加远程

user@local:~/project$ git remote add origin ubuntu-server:/home/username/project.git
user@local:~/project$ git push origin master

我没有评论这么多,但它可以让你了解工作流程以及如何在Eclipse中使用它......

答案 1 :(得分:3)

由于您使用的是网络共享,因此您实际上是直接在服务器上运行,因此不需要整个gitosis事情。

在正常的源代码存储库情况下,没有与其集中式服务器的网络共享。他们只需通过SSH访问它。在这种情况下,gitosis是他们可能用来为某些用户提供对存储库的读/写访问权的解决方案。他们会将更新推送到服务器并下载其他人的更新。

但是,在您的情况下,您从网络共享访问服务器目录,因此就git而言,它与本地目录相同。您需要做的就是编写代码并提交。不需要推拉。

但是,直接在Web服务器的内容目录上运行可能不是您想要的。原因是当您进行更改,切换分支等时,您最终会将Web服务器置于不良状态。想一想。您已在主分支上拥有功能齐全的网站。然后你结帐分支“my_website_2.0”,但尚未完成。突然,您的Web服务器指向的所有文件都处于此半完成状态。不好。

这个问题有很多解决方案,有些是复杂的,有些则不是。例如,您可以在要推送主分支的服务器上设置共享存储库,然后将其克隆到Web内容目录。 (请注意,由于您的网络共享,这仍将通过简单路径完成。)

此页面:Using git to manage website详细介绍了如何使用git并让它自动将共享更改放入您的Web服务器内容目录中,而无需在服务器上进行克隆。

我确定如果你四处寻找,你会找到更多的解决方案。


以下是一些额外的细节,下面是您的混淆。

Egit(和git本身)适用于本地存储库。没有配置远程存储库的命令。你从远程存储库推送和拉出,这就是它。你期待Egit去做它不做的事情。

以下是您需要做的事情:

  1. 在您的服务器上创建一个裸存储库。由于您使用的是网络共享,因此类似于:“git init --bare / mynetworkshare / usr / repositories / my_central_repo”
  2. 在本地克隆该存储库:git clone / mynetworkshare / usr / repositories / my_central_repo my_local_repo
  3. 将您的网络服务器文件添加到本地仓库:cp -r my_webserver_files / * my_local_repo
  4. cd进入本地仓库:cd my_local_repo
  5. 将文件添加到git:git add。 (注意点)
  6. 提交:git commit -m“网络服务器文件的初始提交”
  7. 将文件推送到中央存储库。 “git push origin master”
  8. 有。您现在拥有裸存储库中的文件副本。如前所述,现在的任务是将那些文件从那里获取到您的Web内容目录中。您可以通过将中央存储库克隆到您的Web内容目录中,或者使用更复杂的解决方案来实现,例如我链接的解决方案或您可以通过谷歌找到的其他解决方案。