524 votes

Gemfile.lock devrait-il être inclus dans .gitignore?

Je suis nouveau sorte de bundler et les fichiers qu’il génère. J’ai une copie d’un repo git de github qui est étant a contribué à de nombreuses personnes donc j’ai été surpris de constater que bundler créé un fichier qui n’existe pas dans le repo et n’était pas dans la `` liste.

Depuis j’ai fourchue il, je sais pas ajout pour le repo ne cassera pas quoi que ce soit pour le repo principal, mais si je fais une demande de tirer, il causera un problème ?

Gemfile.lock devrait être inclus dans le référentiel ?

583voto

rwilliams Points 11715

En supposant que vous n'êtes pas à l'écriture d'un rubygem, Gemfile.verrouillage doit être dans votre référentiel. Il est utilisé comme un aperçu de tous les pierres précieuses et de leurs dépendances. De cette façon, bundler ne pas avoir à recalculer tous les gem dépendances chaque fois que vous déployez, etc.

De cowboycoded commentaire.

Si vous travaillez sur un bijou, alors NE PAS de vérifier dans votre Gemfile.verrouillage.

Voici un bel article expliquant ce que le fichier de verrouillage.

52voto

nathan.f77 Points 4941

Le vrai problème se produit lorsque vous travaillez dans un open-source de l'application Rails qui doit avoir de configurer la base de données de l'adaptateur. Je suis le développement de l'Rails 3, la direction générale de la Graisse Gratuit CRM. Ma préférence est postgres, mais nous voulons que la base de données par défaut pour être mysql2.

Dans ce cas, Gemfile.lock doit encore être vérifié avec l'ensemble par défaut des pierres précieuses, mais j'en ai besoin pour ignorer les modifications que j'ai faites sur ma machine. Pour ce faire, j'ai exécuter:

git update-index --assume-unchanged Gemfile.lock

et à l'inverse:

git update-index --no-assume-unchanged Gemfile.lock

Il est également utile d'inclure quelque chose comme le code suivant dans votre Gemfile. Cette charge de la base de données de l'adaptateur de gem, basé sur votre base de données.yml.

# Loads the database adapter gem based on config/database.yml (Default: mysql2)
# -----------------------------------------------------------------------------
db_gems = {"mysql2"     => ["mysql2", ">= 0.2.6"],
           "postgresql" => ["pg",     ">= 0.9.0"],
           "sqlite3"    => ["sqlite3"]}
adapter = if File.exists?(db_config = File.join(File.dirname(__FILE__),"config","database.yml"))
  db = YAML.load_file(db_config)
  # Fetch the first configured adapter from config/database.yml
  (db["production"] || db["development"] || db["test"])["adapter"]
else
  "mysql2"
end
gem *db_gems[adapter]
# -----------------------------------------------------------------------------

Je ne peux pas dire si c'est une meilleure pratique établie ou non, mais il fonctionne bien pour moi.

37voto

Joe Yang Points 629

Mes collègues et moi avons Gemfile.lock différents, parce que nous utilisons mac, windows et différentes plateformes, et notre serveur est linux.

Nous décidons de supprimer Gemfile.lock dans repo et créer Gemfile.lock.server dans repo git, à l’instar de Database.yml database.yml. Puis avant le déployer sur le serveur, nous copier Gemfile.lock.server sur Gemfile.lock sur le serveur à l’aide de cap déployez crochet

12voto

oma Points 5398

D'accord avec r-dub, de la garder dans le contrôle de source, mais pour moi, l'avantage réel est ceci:

la collaboration dans les mêmes environnements (en faisant abstraction du windohs et linux/mac). Avant Gemfile.de verrouillage, le prochain mec pour installer le projet peut voir toutes sortes de confusion des erreurs, de blâmer lui-même, mais il était juste de la chance mec la prochaine version de super gem, la rupture existant dépendances.

Le pire, ce qui s'est passé sur les serveurs de, se non testé la version à moins d'être disciplinés et installer la version exacte. Gemfile.verrou cette explicites, et il est explicitement de vous dire que vos versions sont différentes.

Remarque: n'oubliez pas de groupe de choses, comme :le développement et l' :test

11voto

Willie Wheeler Points 8632

Les docs Bundler portent sur cette question ainsi :

http://gembundler.com/v1.3/Rationale.html

Voir la section intitulée « Vérification de votre Code dans contrôle de Version ».

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X