2009-05-11 7 views
4

I ont un référentiel qui contient le contenu & fichiers source. Les développeurs doivent travailler uniquement sur les fichiers source. Pour économiser de l'espace, les développeurs ne doivent pas cloner les fichiers de contenu (qui sont en Go) dans leur dépôt local. Les fichiers source ne sont pas présents dans le projet en tant que sous-modules, mais plutôt dans le même emplacement que le contenu.uniquement les fichiers modifiés Merging utilisant Git

Mon approche est comme ça - j'ai créé une branche Source de Maître puis supprimé les fichiers de contenu de cette branche. Et j'ai publié la même branche pour le clonage aux développeurs.

Comme je fusionner les changements de la Source branche retour à Maître, les fichiers de contenu sont supprimés dans se Maître. Comment le restreindre? Et si ce n'est pas possible, y a-t-il un moyen de réaliser mon exigence d'avoir une branche/un clone séparé ayant uniquement des fichiers filtrés, c'est-à-dire les fichiers sources dans celui-ci?

Répondre

1

Utilisez git-merge pour fusionner les deux branches, puis git-revert pour enlever la commettras qui a supprimé les fichiers de contenu.

% git checkout Master 
% git merge Source 
% git revert <content-removal-commit-id> 

Ou vous pouvez le faire dans l'autre sens, et de supprimer la suppression de contenu avant commit vous fusionnez en maître. C'est un peu plus complexe, mais cela pourrait garder votre histoire de Master un peu plus propre.

% git checkout Source 
% git branch SourceMerge 
% git checkout SourceMerge 
% git revert <content-removal-commit-id> 
% git checkout Master 
% git merge SourceMerge 
2

Vous ne devriez pas avoir supprimé les fichiers de la branche Source du tout. Si Source et Master ne sont que des branches dans le même référentiel, vos développeurs auront quand même le contenu; il n'y a pas de mal à le faire traîner.

+0

Les types de fichiers de contenu sont flv, wmv, pdf, doc, dont la taille est supérieure à 200 Go. Cela mettra une charge énorme sur le réseau pendant le clonage à distance car il s'agit d'une équipe de développement. Et je pense que ce sera un goulot d'étranglement au niveau des performances pour Git ainsi que pour scanner une telle quantité de fichiers afin de détecter les changements dans certains fichiers source. – kaychaks

+0

"Vous pensez"? Donc, vous êtes en action sans vérifier si c'est vraiment un problème en premier? Duh. 1) Mon point demeure: si Source et Master sont des branches dans le dépôt _same_, elles seront clonées sur les machines des développeurs. 2) À quelle fréquence envisagez-vous de cloner des dépôts complets? 3) Git utilise d'abord les heures de modification des fichiers; seulement si ceux-ci diffèrent, le contenu est vérifié. Aucune perte ici. 4) Laissez votre équipe distante cloner le dépôt une fois, puis laissez les gens là-bas cloner ce dépôt. C'est de la tarte. – Bombe

5

La réponse évidente est que vous devez avoir des référentiels source et de contenu distincts. Ou laissez simplement le contenu être.

+0

Le cadre d'application ne permettra pas de séparer les fichiers sources du contenu. Puis-je utiliser Git pour créer des référentiels distincts en utilisant des modèles de fichiers (par exemple, .java, .groovy, etc. pour les fichiers source et le reste pour le contenu) à partir de la même source? – kaychaks

+0

+1 D'accord.Dans mon propre projet de CMS, j'ai un projet racine qui contient le code, un projet de test qui contient de petits exemples de fichiers de données à tester et un projet de contenu qui est la chose principale et ne contient que config et contenu. –

+1

@kaychaks: Obtenez la source pour le cadre de l'application et corriger le bug. Si vous ne pouvez pas obtenir la source, envoyez un rapport de bogue. –

0

Êtes-vous sûr de vouloir inclure les fichiers multimédias/doc dans votre repo? Voulez-vous suivre les modifications apportées à une bibliothèque multimédia de 200 Go?

Si vous mettez leur référence propriétaire dir dans un fichier .gitignore lorsque vous êtes sur votre branche source, git ignore ces fichiers, ne seront donc pas toucher/les supprimer.

http://git-scm.com/docs/gitignore

+0

Il ne les ignorera que s'ils ne sont pas suivis - ce que je pense qu'ils ne le sont pas. – Bombe

Questions connexes