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?