---
title: "I. کد منبع"
source: Twelve-Factor App
source_url: https://github.com/heroku/12factor
licence: MIT
domain: engineering
subdomain: 12factor
date_added: 2026-04-25
---

## I. کد منبع
### یک مخزن کد که با سیستم کنترل نسخه ردیابی می‌شود، در محیط‌های متعدد مستقر کنید

یک برنامه‌کاربردی دوازده-سازه همیشه در یک سیستم کنترل نسخه، مانند [Git](http://git-scm.com/)، [Mercurial](https://www.mercurial-scm.org/) یا [Subversion](http://subversion.apache.org/) ردیابی می شود. یک رونوشت از پایگاه داده  تحت سیستم کنترل نسخه، *مخزن کد* نامیده می شود که اغلب به *مخزن کد* یا فقط *repo* کوتاه می‌شود.

یک *codebase* هر مخزن کد یکتا (در یک سیستم کنترل نسخه‌ی متمرکز مانند Subversion) یا هر مجموعه‌ای از مخازن کد (در یک سیستم کنترل نسخه‌ی غیرمتمرکز مانند Git) است که یک مسیر توسعه‌ی ریشه‌ی مشترک دارند .

![One codebase به بسیاری از Deploys نقشه می‌دهد](/images/codebase-deploys.png)

همیشه یک تناظر یک به یک بین مخزن کد و برنامه‌ی کاربردی وجود دارد:

* اگر چندین مخزن کد وجود دارد، این یک برنامه نیست -- یک سیستم توزیع شده است. هر مؤلفه در یک سیستم توزیع‌شده یک برنامه است و هر یک به تنهایی می تواند با مؤلفه‌های دوازده-سازه مطابقت داشته باشد.
* برنامه‌های متعددی که یک کد منبع را به اشتراک می گذارند، ناقض اصول برنامه‌ی دوازده-سازه است. راه حل در اینجا این است که کدهای مشترک را در کتابخانه‌هایی به اشتراک بگذارید که می‌توانند از طریق [مدیریت وابستگی‌ها](./dependencies) به کار گرفته شوند.

تنها یک مخزن کد در هر برنامه وجود دارد، اما نمونه‌های زیادی از این برنامه اجرا خواهند شد. هر *استقرار* یک نمونه در حال اجرا از برنامه است. این معمولاً یک محیط عملیاتی و یک یا چند محیط آزمون است. علاوه بر این، هر توسعه‌دهنده یک نمونه از برنامه‌ی کاربردی در حال اجرا در محیط توسعه‌ی محلی خود دارد، که هر کدام نیز واجد شرایط استقرار هستند.

مخزن کد در همه استقرارها یکسان است، اگرچه ممکن است نسخه‌های مختلفی در هر استقرار فعال باشد. برای مثال، یک توسعه‌دهنده تغییراتی دارد که هنوز در محیط آزمون اجرا نشده‌اند. محیط آزمون دارای تغییراتی است که هنوز برای استقرار عملیاتی اجرا نشده است. اما همه آنها از یک پایگاه کد مشترک استفاده می کنند که همه‌ی آن‌ها را به عنوان استقرارهای مختلف یک برنامه قابل شناسایی می کند.
