版本控制和管理是目前国内许多小型科技企业容易忽略掉的重要一环。许多企业到了今天,也许在市场销售等环节会用上像ERP,CRM等工具,但对于科技型公司来说,软件和代码并没有用上新的技术来科学地管理。一方面,软件版本控制依赖于开发者来手工维护,直接存放在电脑上,只是给不同项目命名不同文件夹,对文件存取和变动没有办法有效监控。时间一长,甚至开发维护者本身也找不到原来的东西和变动信息。另一方面,当人员离职和电脑出问题时,容易出现软件和代码丢失,版本混乱等情况。

事实上,软件或科技企业,最重要的就是代码本身,程序员的工作和产品的运行都依赖于代码的完整性和安全性。任何意外的发生,意味着员工要花大量的时间进行重复的工作才能恢复到以前的状况,这意味着大量的成本和人力。

因此,我们建议所有的科技型企业,在进行本地版本控制和管理的同时,也需要学习和尝试科学的软件安全和版本控制管理工作。Digiwiki将尝试帮助用户使用Eccee免费安全的软件管理和版本控制工具。您的企业无需专业的IT人才,就可以使用最新的免费工具来管理软件代码。

要使用Eccee提供的git服务器(gitlab.eccee.com:11080),请自行注册一个帐号,并为公司申请安全私密的用户组,以便公司内部人员可以协同开发。所有的代码仅对公司的用户组成员开发,只有核心的管理员能维护软件代码的主分支,并为不同项目分配不同的项目分支,确保代码的安全性和可读性。

用户可以自行注册一个帐户,以便访问Eccee的公共项目。为了访问公司的私密项目,通常需要以公司为单位创建群组,并把公司的开发人员注册帐号都加入群组当中,以保证项目仅在公司内部人员中可见。要创建企业群组,请发邮件到robin.tu@eccee.com申请,注明企业名称,英文简称(作为群组名),群组管理员和主要开发人员在Eccee git上的注册帐号,人工审核通过即可生效。管理员将会收到确认邮件,并可以在群组中添加相关成员。

首先,确保您已经有注册帐号,如果没有,请先免费注册一个。您可以利用http协议和Ecceegit的密码存取代码,确保您的电脑上git项目用户和邮箱的配置和Ecceegit一致。

如果您需要用SSH来存取代码,用您的注册帐号登陆,在右上角下拉菜单中选择“Setting”,并在配置页面中选择“SSH Keys”标签页,添加个SSH的公钥。这里的SSH公钥是指您进行开发的电脑上的公钥,添加到Eccee的git服务器后,您就可以用您的电脑同git服务器进行通讯和存取代码。对于Linux电脑来说,通常您可以使用已经有的公钥,如果没有,您可以生成一个。查看一下您的用户目录下的隐藏路径.ssh,是否有类似id_rsa.pub之类的文件,文件内容是ssh-rsa开头的字符串,这就是公钥文件,无论您原来是否有公钥,您都可以安全生成一个新的公钥文件来同ecceegit服务器通讯。您可以使用RSA或ED25519密钥。

用ED25519密钥,
ssh-keygen -t ed25519 -C "Your email or your laptop PN"
或是用RSA密钥,则是下面这个生成命令。
ssh-keygen -t rsa -C "your.email@example.com" -b 4096

这个命令默认生成的路径是~/.ssh/id_XXXXX.pub,您还可以更改或是选择输入保护密码,一般用默认路径和无密码保护即可。生成后公钥后,将该密钥的文本内容粘贴在SSH Keys的配置页面的Key表单里,并为它取个名字,保存即可。现在您就可以在你的开发电脑上用git和Eccee的服务器交互了。

首次使用git,您需要配置一下邮箱和用户名,请和Ecceegit上的注册信息保持一致。如果您之前已经配置过了,可以通过下面命令查看配置:

git config --list

如果之前没有配置,或是需要更改全局配置选项,请用

# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

我们将分别介绍从本地新建一个项目和直接在web上建立代码库两种方法.

一般我们会在本地先建立一个新项目,进行开发,等到一定工作量后,才发布到托管的远程仓库中。发布之前,先在该项目根目录内初始化为git可管理的仓库:
git init
然后再用git add <文件名> 添加相关文件到仓库中,如果是项目内的全部文件,直接用
git add .
用git commit -m或-a来提交变化到本地仓库
git commit -m “initial add files”
接下来就可以提交到远程仓库中,我们先要在托管服务器上注册好用户,添加本地计算机的公钥到服务器上,然后在远程仓库建立好项目,才可以上传。使用ecceegit并不影响您继续使用github或公司自有的远程仓库。用下面命令查询当前有哪些远程仓库,然后创建ecceegit远程仓库,并推送
git remote -v  
git remote add ecceegit ssh://git@gitlab.eccee.com:11022/用户名或组名/项目名  
git push -u ecceegit master  

首次推送,远程仓库并没有任何版本,需要用-u参数,这样原来为空的远程仓库就和本地内容一样有master主版本了。
后续更改推送,如无其它分支和其它远程仓库,只需git commit -m和git push即可。

#本地改动
git commit -a  #提交
git push 或 git push ecceegit #上传到远程库
在Ecceegit上新建一个项目,新建个README.rd。然后您可以直接用git clone来在本地同步一个代码库。
$ git clone ssh://git@gitlab.eccee.com:11022/用户名或组名/myproject.git
Cloning into 'myproject'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

Yocto方式来开发嵌入式Linux系统,其本身也是用git的方式来管理相关的代码。当我们新建一个项目,并Bitbake出镜像时,在/tmp/work/目录下会有所有的DEY用到的源码,其中最重要的是一个目录是:tmp/work/目标平台-dey-linux-gnueabi/linux-dey/内核版本/git,这个git目录下存放的是DEY所需的Linux内核和设备树源码。当我们使用

bitbake -c devshell virtual/kernel

调出dey系统的shell时,初始路径也是在这个git目录下。如果您用git remote -v来查看git的远程库的话,它是类似这样的:

origin /home/robin/dey-workspace/mycc28/downloads/git2/github.com.digdotcom.yocto-linux.git/ (fetch)
origin /home/robin/dey-workspace/mycc28/downloads/git2/github.com.digdotcom.yocto-linux.git/ (push)

从这里可以看出两层意思:这是一个本地作为远程库的git,远程库的url指向的是本机电脑上的路径;另一个意思是在bitbake过程中,它把直正的远程github上的库下载到本地路径,并让本地远程库指向本地路径。

进入到linux的git目录,查看一下当前分支和远程库信息

git branch -a

可以看到这里的分支版本指向的是最近一次官方库的commit版本。为了维护自己的版本库,您首先需要在gitlab.eccee.com上新建一个项目,然后新建一个远程库指向该项目,在本地项目上新建一个分支,把该分支源码commit到该项目上。完整的过程如下:

新建一个远程库,在ECCEE gitlab上新建个myproject的项目,然后根据该项目的url,添加到本地的远程库中,该远程库命名为myorigin
git remote add ecceegit git@123.206.122.219:digirobin/myproject.git
git checkout -b myproject
git push ecceegit myprject

当本地有重大改动时,记得给该改动打个tag,以便将来快速回退或检出该版本。

关于强制推送

关于强制推送

有时候,远程版本库错误更新了,想用本地强制推送时会发生保护错误。 如果确实需要用本地强制推送,先进入到ecceegit的项目页面,在settings>repository里更改Protected Branch,先改为unprotected模式 git push –set-upstream ecceegit master –force 然后还是改回来,毕竟可以防止误操作。