1

I'm looking for a solution about my team workflow on GIT.

We are 12 devs working in a very simple GIT workflow where troubles appear recently on mecanism we used from the beginning of our project.


Our workflow.

We have branch organised like this :

master <- latest distribution files
|
|- v1/master <- latest distribution files for project version 1
   |
   |- v1/bug <- branch to fix reported bug
      |
      |- v1/bug-TICKET# <- Each bug are resolved in particular bug branch, and is finaly merge to v1/master AND v1/dev
      |
      |- v1/dev <- branch to merge new features for next distribution revision
          |
          |- v1/dev-TICKET# <- Each dev make here his own branch to work, 

Our process

Well, as shortly explained, each dev work in a branch created from v1/dev. At the end of develpment, the dev merge v1/dev to his ticket branch for cross test by another dev. If test step match ticket goals, the dev could merge his branch inside v1/dev and delete the ticket branch.

When we decide to update the distribution, we merge v1/dev to v1/bug next v1/bug to v1/master and finally v1/master to master.

Sometime, a new distribution revision get some bugs. In this case, we work directly on v1/bug like we do in v1/dev (create ticket branch, cross testing etc..). That allow us to do not push in distribution latest v1/dev features, because we won't push it in distribution. When a bug is resolved, we merge v1/bug to v1/master and v1/master to master. And we push v1/bug to v1/dev, to push latest fix to the futur distribution revision.


The problem

Recently, 3 of us get troubles about merging v1/dev branch inside his tickets branch.

Some files (random files) are annonced as "untracked" files however these files were exist in v1/dev and were pushed to v1/dev by another dev from another dev ticket branch.

we got message like this one :

# On branch v1/dev-5445-LCA
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#   modified:   application/Bootstrap.php
#   renamed:    application/cache/formateur/catalogue/content.txt -> application/cache/factures/Content
#   new file:   application/cache/factures/zend_cache---internal-metadatas---archives_134859
#   new file:   application/cache/notifications/Content
#   deleted:    application/cache/traductions/zend_cache---internal-metadatas---Zend_Translate_Tmx_Options
#   modified:   application/controllers/TMSController.php
#   modified:   application/forms/TMSForm.php
#   modified:   application/models/ORM.php
#   modified:   application/models/document/DocumentSet.php
#   modified:   application/models/message/MessageGet.php
#   modified:   application/modules/admin/controllers/AjaxController.php
#   deleted:    application/modules/client/controllers/AjaxController.php
#   deleted:    application/modules/client/controllers/CatalogueController.php
#   deleted:    application/modules/client/controllers/ClientController.php
#   deleted:    application/modules/client/controllers/DashboardController.php
#   deleted:    application/modules/client/controllers/IndexController.php
#   deleted:    application/modules/client/forms/LoginForm.php
#   deleted:    application/modules/client/layout/default.phtml
#   deleted:    application/modules/client/layout/simple.phtml
#   deleted:    application/modules/client/models/Offre.php
#   deleted:    application/modules/client/views/routes/Routes.php
#   deleted:    application/modules/client/views/scripts/dashboard/index.phtml
#   deleted:    application/modules/client/views/scripts/index/login.phtml
#   deleted:    application/modules/client/views/translations/client.tmx
#   modified:   application/modules/formateur/controllers/AjaxController.php
#   modified:   application/modules/formateur/controllers/CatalogueController.php
#   modified:   application/modules/formateur/controllers/DossiersController.php
#   modified:   application/modules/formateur/controllers/FacturesController.php
#   modified:   application/modules/formateur/controllers/helpers/DossierNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/FactureNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/MessagesNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/PlanificationNotificationsHelper.php
#   modified:   application/modules/formateur/forms/AddFactureForm.php
#   modified:   application/modules/formateur/forms/AddFemLanguesForm.php
#   modified:   application/modules/formateur/forms/DocumentForm.php
#   modified:   application/modules/formateur/forms/DossiersForm.php
#   modified:   application/modules/formateur/forms/EditFactureForm.php
#   modified:   application/modules/formateur/layout/default.phtml
#   modified:   application/modules/formateur/models/Catalogue.php
#   modified:   application/modules/formateur/models/Document.php
#   modified:   application/modules/formateur/models/Dossiers.php
#   modified:   application/modules/formateur/models/Facture.php
#   modified:   application/modules/formateur/models/Message.php
#   modified:   application/modules/formateur/views/routes/Routes.php
#   modified:   application/modules/formateur/views/scripts/dossiers/detail.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/document.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/documentfemlangues.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/index.phtml
#   modified:   application/modules/formateur/views/scripts/factures/index.phtml
#   modified:   application/modules/formateur/views/scripts/planification/index.phtml
#   modified:   application/modules/formateur/views/translations/formateur.tmx
#   modified:   application/modules/technique/controllers/AjaxController.php
#   modified:   application/modules/technique/layout/default.phtml
#   modified:   library/Const/Module.php
#   deleted:    library/Const/Tva.php
#   modified:   library/Const/TypeDocument.php
#   modified:   library/Const/TypeFormationPrixDetail.php
#   modified:   library/My/Controller/Action/Helper/Flash.php
#   modified:   library/My/Mail/Mailer.php
#   modified:   library/My/Routing/Layout.php
#   deleted:    library/My/Routing/Routes.php
#   modified:   public/js/formateur/dossiers/documentfacture/script.js
#   modified:   public/js/formateur/dossiers/documentfem/script.js
#   modified:   public/js/formateur/dossiers/editfacture/script.js
#   modified:   public/js/formateur/dossiers/index/script.js
#   modified:   public/js/formateur/factures/index/script.js
#   modified:   public/js/formateur/planification/index/index.js
#   modified:   public/js/pdlf.js
#   modified:   public/skins/formateur/css/dossiers/style.css
#   modified:   public/skins/formateur/css/planification/style.css
#   deleted:    public/skins/formateur/img/icons-actions/close.png
#   deleted:    public/skins/technique/css/basics.css
#
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   .gitignore
#   modified:   application/Bootstrap.php
#   deleted:    application/cache/factures/Content
#   deleted:    application/cache/factures/zend_cache---internal-metadatas---archives_134859
#   deleted:    application/cache/notifications/Content
#   modified:   application/controllers/TMSController.php
#   modified:   application/forms/TMSForm.php
#   modified:   application/models/ORM.php
#   modified:   application/models/document/DocumentSet.php
#   modified:   application/models/message/MessageGet.php
#   modified:   application/modules/admin/controllers/AjaxController.php
#   modified:   application/modules/formateur/controllers/AjaxController.php
#   modified:   application/modules/formateur/controllers/CatalogueController.php
#   modified:   application/modules/formateur/controllers/DossiersController.php
#   modified:   application/modules/formateur/controllers/FacturesController.php
#   modified:   application/modules/formateur/controllers/helpers/DossierNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/FactureNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/MessagesNotificationsHelper.php
#   modified:   application/modules/formateur/controllers/helpers/PlanificationNotificationsHelper.php
#   modified:   application/modules/formateur/forms/AddFactureForm.php
#   modified:   application/modules/formateur/forms/AddFemLanguesForm.php
#   modified:   application/modules/formateur/forms/DocumentForm.php
#   modified:   application/modules/formateur/forms/DossiersForm.php
#   modified:   application/modules/formateur/forms/EditFactureForm.php
#   modified:   application/modules/formateur/layout/default.phtml
#   modified:   application/modules/formateur/models/Catalogue.php
#   modified:   application/modules/formateur/models/Document.php
#   modified:   application/modules/formateur/models/Dossiers.php
#   modified:   application/modules/formateur/models/Facture.php
#   modified:   application/modules/formateur/models/Message.php
#   modified:   application/modules/formateur/views/routes/Routes.php
#   modified:   application/modules/formateur/views/scripts/dossiers/detail.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/document.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/documentfemlangues.phtml
#   modified:   application/modules/formateur/views/scripts/dossiers/index.phtml
#   modified:   application/modules/formateur/views/scripts/factures/index.phtml
#   modified:   application/modules/formateur/views/scripts/planification/index.phtml
#   modified:   application/modules/formateur/views/translations/formateur.tmx
#   modified:   application/modules/technique/controllers/AjaxController.php
#   modified:   application/modules/technique/layout/default.phtml
#   modified:   library/Const/Module.php
#   modified:   library/Const/TypeDocument.php
#   modified:   library/Const/TypeFormationPrixDetail.php
#   modified:   library/My/Controller/Action/Helper/Flash.php
#   modified:   library/My/Mail/Mailer.php
#   modified:   library/My/Routing/Layout.php
#   modified:   public/js/formateur/dossiers/documentfacture/script.js
#   modified:   public/js/formateur/dossiers/documentfem/script.js
#   modified:   public/js/formateur/dossiers/editfacture/script.js
#   modified:   public/js/formateur/dossiers/index/script.js
#   modified:   public/js/formateur/factures/index/script.js
#   modified:   public/js/formateur/planification/index/index.js
#   modified:   public/js/pdlf.js
#   modified:   public/skins/formateur/css/dossiers/style.css
#   modified:   public/skins/formateur/css/planification/style.css
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   application/modules/client/
#   library/Const/Tva.php
#   library/My/Routing/Routes.php
#   public/skins/formateur/img/icons-actions/close.png
#   public/skins/technique/css/basics.css

In this message :

  • Some untracked files already exist in v1/dev and are "untracked" when we merge v1/dev in dev ticket branch (like library/Const/Tva.php)
  • Some file are "not staged" and "changes to be committed" (like application/modules/formateur/controllers/helpers/FactureNotificationsHelper.php) This context seem impossible during a merge, we encourage dev to commit and push before executing a merge.

Why GIT do this? Is there a good practice to avoid this behaviour?

Community
  • 1
  • 1
abenevaut
  • 768
  • 1
  • 9
  • 23
  • We already don't understand what is the problem. Same thing appear when a dev commit his change inside his dev branch and going to v1/dev. After a pull inside v1/dev, it was impossible to checkout another branch because after the pull in v1/dev, a status appear with strange change (the dev pull only the branch... without doing any other change in any file) and it is impossible to commit this changes... So we are forced to delete the local repo of the dev and clone the repo again... Any idea? – abenevaut Nov 07 '14 at 13:07

1 Answers1

0

It is a bit unclear to me what you are asking. But a very common misunderstanding about the way in which git works, seems to be plaguing you here.

Remember that GIT ONLY TRACKS CHANGES. That is not as simple as it sounds. We tend to think of our work in terms of FILES. But Git only tracks CHANGES in files. The "Untracked files" represent changes that were not Added to the index.

You can solve this in one of two ways:

  1. Explicitly add those files listed in the "untracked files" before making a commit; with the git add command. You can list multiple files in one command
  2. Use the dash "u" switch when you commit; git commit -u .

Elsewhere on SO this has been described.

Community
  • 1
  • 1
Thom Parkin
  • 346
  • 1
  • 9