בקרת גרסאות (version control) היא מערכת שמתעדת ומנהלת שינויים בגרסאות שונות של אותו קובץ או פרויקט. המערכת שומרת היסטוריה של השינויים, מאפשרת השוואה בין גרסאות וחזרה לגרסה קודמת כשצריך.
מערכות כאלה מאפשרות עבודת צוות במקביל על אותו הפרויקט. משתמשים בהן בפיתוח תוכנה, בבניית אתרי אינטרנט ובהנדסה של תרשימים וקבצי CAD. המידע הנשמר יכול להיות קוד מקור, מסמכים או קונפיגורציה.
הפונקציה הבסיסית היא להשוות בין גרסאות ולחזור אחורה. בפיתוח תוכנה נדרש גם לנהל עבודה מקבילה של מפתחים, לעקוב אחרי שינויים ולמזג אותם. מיזוג (merge) הוא איחוד של שינויים שונים אל גרסה אחידה. לפעמים פותחים שני מסלולים שונים של פיתוח (branch), אחד עם תיקוני באגים והשני עם תכונות חדשות, ואז ממזגים בין השניים.
שיטה פשוטה לשמירת גרסאות הייתה לשמור עותקים שונים ולקרוא להם במספרים. זה עובד לפעמים, אבל הוא פגיע לשגיאות. לכן פותחו כלים שמבצעים חלק מהניהול באופן אוטומטי.
מערכות בקרת גרסאות מתקבלות גם בתחומים אחרים, במיוחד שם שיש שרטוטים טכניים שצריך לחזור אליהם. עם זאת, הכלים המורכבים יותר נפוצים בעיקר בפיתוח תוכנה. כיום המערכת הפופולרית ביותר בפיתוח היא גיט (Git).
מערכות פשוטות שומרות את המידע בתוך הקבצים עצמם. מערכות מתקדמות שומרות מאגר מרכזי (repository) שממנו ניתן לעבוד מרחוק ומקומית.
כאשר שני אנשים מנסים לשנות את אותו קובץ באותו זמן, עלולות להיווצר בעיות. גישה אחת היא נעילת קובץ: רק מי שנעיל יכול לשנות אותו. בגישה מבוזרת אין נעילה, ולכן משתמשים במיזוג שינויים. המיזוג יכול להיות אוטומטי או ידני.
הרבה מערכות משתמשות ב"דחיסה של דלתא" (delta compression). זה אומר ששומרים רק את ההבדלים בין גרסאות רצופות. כך חוסכים מקום אחסון.
Repository (מאגר): המקום שבו נשמרים כל הקבצים וההיסטוריה. לעיתים קוראים לזה depot (מחסן).
Working copy (עותק עבודה): עותק מקומי של הקבצים מהמאגר. העבודה מתבצעת בעותק זה.
Check-out: יצירת עותק עבודה מקומי מתוך המאגר.
Commit (שמירת שינויים): כתיבת השינויים מהעותק המקומי חזרה למאגר.
Change / diff / delta: שינוי מסוים בקובץ. diff זו הדרך להשוות בין שתי גרסאות ולהראות את ההבדלים.
Change list / change set: קבוצה של שינויים שנשלחת ב־commit אחד.
Update / sync: הכנסת שינויים שבוצעו במאגר לעותק המקומי.
Branch: הסתעפות של סט קבצים בנקודה בזמן. זה מאפשר פיתוח נפרד של גרסאות.
Merge: מיזוג של שני סטים של שינויים לגרסה אחת משותפת.
Revision / version: גרסה בשרשרת השינויים.
Tag / release / label: סימון נקודת זמן חשובה של סט קבצים בשם שקל לזהות.
Import: העתקת תיקיה מקומית למאגר.
Export: יצירת עץ תיקיות נקי מהמטה־דאטה של ניהול גרסאות, לשם פרסום.
Conflict (התנגשות): מצב שבו שני שינויים סותרים נעשו לאותו מקום. התוכנה לא יכולה להחליט לבד.
Resolve: פעולת המשתמש לפתרון התנגשות.
Annotate / blame: הצגת הקובץ עם סימון מי שכתב כל שורה. משמש לדעת מי אחראי לשינוי.
בקרת גרסאות היא דרך לשמור שינויים בקבצים. המערכת זוכרת כל גרסה של הקובץ.
היא עוזרת לצוותים לעבוד יחד על אותו פרויקט. משתמשים בה בפיתוח תוכנה ובציורים טכניים.
המערכת מאפשרת לחזור לגרסה ישנה אם צריך. היא גם משווה בין גרסאות שונות.
לפעמים עובדים כמה אנשים על אותו קובץ. אם יש שני שינויים באותו מקום, צריך לחבר אותם. לחיבור קוראים מיזוג. מיזוג יכול להיות אוטומטי או שעושים אותו ידנית.
אם רוצים לפתח שני כיוונים שונים, יוצרים מסלול נפרד שנקרא ענף. אחר כך אפשר לחבר את הענפים.
הרבה פרויקטים משתמשים בגיט. זו מערכת פופולרית לניהול גרסאות.
יש מערכות שמוֹצאות את המידע בתוך הקבצים עצמם. יש מערכות ששומרות מאגר מרכזי (מאגר = מקום שבו נשמרים כל הקבצים).
לעיתים נועלים קובץ כדי שמישהו יחזיק אותו לבד. בגישה אחרת לא נועלים, וממזגים שינויים.
חוסכים מקום על ידי שמירה רק של ההבדלים בין גרסאות. זה נקרא דחיסת דלתא.
Repository (מאגר): מקום ששומרים בו את כל הקבצים.
Working copy (עותק עבודה): עותק מקומי של הקבצים. עובדים בו על השינויים.
Check-out: יצירת עותק עבודה מהמאגר.
Commit (שמירת שינויים): שמירה של השינויים במאגר.
Branch (ענף): מסלול נפרד של עבודה על קבצים.
Merge (מיזוג): חיבור שינויים משני מקומות לקובץ אחד.
Conflict (התנגשות): כששני אנשים שינו את אותו מקום בצורה שונה. צריך לפתור את הבעיה.
Annotate / blame: מראים מי שינה כל שורה בקובץ.
תגובות גולשים