常见问题-获取与更新项目的GIT源代码

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search

以下是有关如何检索和使用Dolibarr项目源代码的信息。

介绍了几种方法,但我们建议使用基于GitHub的方法。

通过下载 tgz 获取源代码的最新版本

非技术用户可以使用此方法。

此方法用于获取主开发分支(称为HEAD)的源代码。此操作包括下载Dolibarr应用程序文件的最新版本,这些文件每晚打包成 tgz 文件。此文件可通过以下链接获得:

Last GitHub snapshot of Dolibarr source files.

新文件会覆盖旧文件。这种方法的不便之处在于,每次要获取更新时都必须下载和解压缩包。

开发人员不应使用此方法获取源代码,而应使用下一个方法。

使用GIT匿名访问获取源代码的最新版本

您可以在没有任何 GIT 访问权限的情况下使用此方法。但使用本方法不能提交任何代码变更,因此,如果您是开发人员,建议创建一个 GitHub 帐户并使用下一个方法而不是本方法。

前提条件

  • 使用Eclipse IDE

首先,您需要成功安装Eclipse及其 EGit 插件。

要安装 EGit 插件,请使用Eclipse菜单中的帮助,其次单击安装新软件,然后单击可用软件站点。在出现的地址清单中,找到链接:

https://download.eclipse.org/egit/updates

之后,选择要安装的 EGit(无需选择 JGit)

  • 使用 GIT 命令行客户端

为了检索源代码并对其进行修改,您需要拥有一个GitHub帐户并安装一个GIT客户端(Linux平台的GIT命令行工具使用“sudo apt-get install git”安装,Windows平台的GIT客户端前往 https://git-scm.com/download/win 下载并安装)。

克隆

首先,在 GIT 客户端工具中输入包含引用源的存储库的值。

  • 使用 Eclipse,进入 GIT,单击“克隆 GIT 存储库”按钮。输入要获取的项目的 GIT URL。

GIT Url for Dolibarr official source is:

git://github.com/Dolibarr/dolibarr.git (read only)
or if you created a fork of dolibarr github from github web interface
git@github.com:yourgitaccount/dolibarr.git (read and write access)

Your Eclipse GIT client will ask you to choose the branches you are interested in. Branches not selected now could be selected later by doing a "Fetch" from the "Remotes" view, but try to choose only the branch you need. This will save you time and problems later.

Note: if you are behind a firewall, you must set Eclipse proxy credentials into Eclipse menu Windows - Preferences - General - Network connection and use the alternative URL:

https://gitlogin:gitpassword@github.com/yourgitaccount/dolibarr.git
  • 使用 GIT 命令行客户端

First setup your git client:

git config --global user.name "Your Name"
git config --global user.email "user@domain.com"
git config --list

Then clone repository locally:

git://github.com/Dolibarr/dolibarr.git (read only)
or if you created a fork of dolibarr github from github web interface
git@github.com:yourgitaccount/dolibarr.git (read and write access)

Note: if you are behind a firewall, you must set your porxy information and use the alternative https URL:

git config --global http.proxy http://proxyuser:proxypass@proxyserver:proxyport
git clone https://gitlogin:gitpassword@github.com/yourgitaccount/dolibarr.git dolibarr

Once this step is validated, your GIT client will download all files from remote GIT server. This may last several seconds or minutes.

Once download is finished, you must choose which branch to us to work on.

  • 在命令行界面上使用 GIT
git checkout develop
git checkout x.y

This will create local branch and make checkout automatically.

  • With Eclipse, right click on "Branches - Remotes - The branch you want to duplicate locally".

Choose "Create Branch" (and check the box "Checkout"). This will duplicate content of branch to work on it locally and will refresh your "Working Directory" to work on this branch.

Create Eclipse project:

If using Eclipse, once your branch is created locally, create a PHP project from assistant by choosing "Create from existing project" and select directory that is your GIT local repository (Do not choose to create a PHP project from scratch). Then right click on project from your Eclipse workspace and Choose "Team - Share". Select GIT and click on option "Use or create repository in parent folder of project". An alternate method is File->Import, Git->Project from Git, Select the Git repository and Next, Use New project Wizard -> Php project, enter the folder of you GIT local repository.

Then, you can setup Eclipse to avoid it to scan all project files for its build tools (Outline scanner, TODO scanner, syntax scanner...). This will avoid Eclipse to be too slow. For this, right click on project, choose Build Path and setup it like into following screenshot.

Eclipse php build path.png

使用GitHub用户权限获取源代码的最新版本

前提条件

  • With Eclipse IDE

You must before create an account on GitHub (https://github.com/) and upload a public RSA or DSA certificate into your account profile.

Then, you must have a working install of Eclipse. EGit plugin must also have been installed. For this, use the Find And Install process into Eclipse menu, add the GIT update URL:

https://download.eclipse.org/egit/updates

Then choose to install EGit.

  • With the GIT Command Line Client Interface:

You must before create an account on GitHub (https://github.com/) and upload a public RSA or DSA certificate into your account profile.

Then, you need to install GIT client (GIT command line tool with Linux installed with "sudo apt-get install git", or the GIT client for Windows found at https://git-scm.com/download/win).

Fork

Login to Github, with login you created in previous step. Then go onto page

https://github.com/Dolibarr/dolibarr

And click on button "Fork".

This will create a copy (a fork) of project into your own github area. Because you will be the owner of this fork, you will have all permissions on it to be used in next steps.

克隆

Then process is same as getting sources with anonymous access.

URL to use for GIT clone is same:

git@github.com:YourGitHubLogin/dolibarr.git

Note that a HTTPS URL is also available but it's sometimes offline (so prefer using first one, link with HTTPS is required only if you are behind a firewall):

https://yourgithublogin@github.com/Dolibarr/dolibarr.git

更新您的存储库

To update your local workspace:

  • With Eclipse IDE:

right click on Eclipse project and select "Pull".

If you made some changes into your Eclipse workspace on files that were changed into the GIT remote reference, your GIT client will make a merge automatically.

  • If there is conflicts, the merge will mark all conflict files as "conflict" (See later to solve this state).
  • If not, you will get all new version files including all your changes.

If you already have commited some files into your local repository, your workspace will be marked as "Merged". All you have to do is make a commit to validate your local repository as including your changes and changes made by others.

  • With the GIT Command Line Client Interface:
git pull

提交并推送您的变更

To see all changes you made into your working directory and waiting to be added into Git:

  • With GIT Command Line Interface:
git status
git diff subdir/filename

To add changes made into your local repository into the GIT index, then commit this index :

  • With Eclipse: Right click on file or directory to commit. Select file to add/remove/update into commit.
  • With GIT Command Line Interface:
git commit -a -m "Commit text"

This will save add and changes into your local branch.

To push them on the GIT repository server,

  • With Eclipse: right click on project and choose "Team - Push to Upstream".
  • With GIT Command Line Interface:
git push

To cancel a commit:

  • With GIT Command Line Interface, if commit was not already pushed:
git reset --soft HEAD~1
  • With GIT Command Line Interface, if commit was already pushed:
git revert IdCommit  or  git revert HEAD  (for last commit)

To merge changes done into your forked GIT instance into official Dolibarr instance:

  • Go into GitHub web interface of your forked Git instance.
  • Click on small button "Create a Pull request".
  • Choose commit you request inclusion and validate.

要求官方项目接受您的变更(PR)

Once you pushed one or several commit toward your distant fork area on github, you can ask the Dolibarr core team to include it into official project. We call this "making a pull or a merge request" also called "PR". For this, follow this tutorial: https://help.github.com/articles/creating-a-pull-request/

将外部提交添加到当前存储库

Some developers may work and do commit into their own Git repository after forking the project. If you are interesting into getting this changes, you can import them with the following steps.

You need both Eclipse and GIT Command Line interface to achieve this:

  • First, go into GIT setup view and right click on "Remotes" of your Eclipse Git working space and choose "Create a remote..."
  • Type name or remote fork the developer has create (in most cases, it's developer Git login). For example: "thedevlogin". Choose also "Configure Fetch".
  • Type URI of Git repository of developer. For example: git://github.com/thedevlogin/dolibarr.git. Also add a refspec value to declare the branch you want to get. For example: refs/heads/master:refs/remotes/thedevlogin/master. Click "Save and Fetch". A new entry will be added into "Remote Tracking" making possible to read/get commits done into this branch.

Now, go on command line of your git repository (in most cases on Linux, it's /home/yourlogin/git/yourdolibarr) and type the git cherry-pick command:

git cherry-pick -x commitid

where commitid is value of commit id you want to get.

Once this is done, go back to Eclipse and make a refresh on project. You will see modified files appears with decorators (with conflicts if there is).

It the cherry-pick fails because of conflicts, you can cancel the cherry-pick try with

git cherry-pick --abort

解决冲突

If a file has been marked as "conflict" after a Pull, open the file to edit it. Find string "<<<<<<<<<<", you will see part of code that is conflict between "<<<<<<<<<" and ">>>>>>>>". Edit manually code lines and remove "<<<<<<<<" and ">>>>>>>".

Then, right click on file and select "Add".

If you prefer to forget completely all changes you made into all files (so to restore you workspace with content of remote repository), you can make a hard reset:

  • With Eclipse: Right click on project top line and select "Reset" then "Hard" then "Reference - HEAD".
  • With GIT Command Line Interface: You can achieve this with command
git reset --hard HEAD

To reset changes you commited but not pushed to origin

git reset --hard origin/develop

标记源代码

With GIT Command Line Interface:

To add a tag to a current version:

git tag -a -m "Release|Maintenance release x.y.z" "x.y.z"
or
git tag -a -f -m "Beta x.y.betai" "x.y.betai_YYYYMMDD" idcommit   # -f force if an existing tag already exists, idcommit allows to choose commit to tag

git push --tags   # To push tags to remote origin

To remove a tag:

git tag -d "x.y.z_YYYYMMDD"
git push remoteentryname :x.y.z_YYYYMMDD    # To validate delete on remote origin

创建新分支

With GIT Command Line Interface:

Create a clone (see previously) of the branch from where you want to create another branch, then go into directory and launch command:

git branch x.y
git push origin x.y

With Eclipse:

Create a clone (see previously) of the branch from where you want to create another branch, with a checkout done. The go into view git. Choose branches, remote tracking and select start branch. Right click and choose "Create branch". Then make a push to create branch remotely. Then go into "Remotes - origins" and edit the entries to pull and push onto new branch. It may also be required to edit the .git/config file to have project linked by default onto new branch.

删除分支

With GIT Command Line Interface:

Do a push on branch but add : before name of branch:

git push remoteentryname :branchnametodelete

将维护分支 x.x 合并到 dev 分支

With Eclipse:

  • Go onto the root directory of project with a checkout of the dev branch.
  • Check fetch setup to be sure, this repository contains both information of dev branch and version x.x you want to merge.
  • Right click onto root directory and choose "Team - Merge". Select "x.x". Click onto "Merge options - Commit", because we want to commit merged branch if there is no conflicts.
  • Once merge is done, check everything is ok.
  • Commit and push.

将分支推送到另一个Git服务器

You may want to synchronize another GIT server. To synchronize push to another server, this is how to proceed. With Eclipse:

git push sourceforge develop
git push --tags sourceforge develop

统计

With GIT Command Line interface:

To count number of changes developers have made between a version x and y:

  • First, search commit id of tags you want to compare

To find id_start (common commit id between 2 versions/tags)

git merge-base refs/tags/3.3.0 origin/3.4
or
git merge-base 3.7 origin/develop

To find id_end, choose among

git show-ref

Choose a value for id_start and id_end Note: id_end can be HEAD.

  • Then run git log to have list of all changes from last common commit to last commit
git log id_start..id_end
  • To get total number of added/deleted lines:
git log --ancestry-path --numstat --pretty="%H" id_start..id_end | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'


To count number of changes finally between a version x and y (it differs from previous count because in previous count, a change can be done 2 times at two different moment to change differently. With second method, you count changes finally found if changes were ok at first try).

  • Use same method than previously but instead of running git log, run git diff.
git diff -b -M --numstat --pretty="%H" id_start..id_end | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'


More information in GIT usage is available here.