ਫਾਈਲਾਂ ਦੀ ਦੁਹਰਾਓ ਕੀਤੇ ਬਿਨਾਂ ਕੁਸ਼ਲ ਵਰਜ਼ਨ ਕੰਟਰੋਲ ਬਣਾਉਣਾ
ਹਰ ਵਰਜ਼ਨ ਜਾਂ ਫੋਰਕ (fork) ਲਈ ਫਾਈਲਾਂ ਦੀਆਂ ਪੂਰੀਆਂ ਕਾਪੀਆਂ ਸਟੋਰ ਕਰਨਾ ਜਗ੍ਹਾ ਬਰਬਾਦ ਕਰਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਦਸ ਫਾਈਲਾਂ ਵਾਲੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਇੱਕ ਲਾਈਨ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਦਸਾਂ ਫਾਈਲਾਂ ਨੂੰ ਦੁਬਾਰਾ ਸੇਵ ਨਹੀਂ ਕਰਨਾ ਚਾਹੀਦਾ।
ਮੈਂ ਆਪਣੇ LaTeX Writer ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਬਣਾਉਂਦੇ ਸਮੇਂ ਇਸ ਸਮੱਸਿਆ ਦਾ ਸਾਹਮਣਾ ਕੀਤਾ। ਮੈਨੂੰ ਉੱਚ ਸਟੋਰੇਜ ਲਾਗਤਾਂ ਤੋਂ ਬਿਨਾਂ ਵਰਜ਼ਨ ਕੰਟਰੋਲ ਅਤੇ ਪ੍ਰੋਜੈਕਟ ਫੋਰਕਿੰਗ ਨੂੰ ਸੰਭਾਲਣ ਦੇ ਤਰੀਕੇ ਦੀ ਲੋੜ ਸੀ।
ਮੈਂ ਦੇਖਿਆ ਕਿ GitHub ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ। GitHub ਹਰ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਤਬਦੀਲੀ ਕਰਦੇ ਹੋ, ਤਾਂ ਪੂਰੀ ਰਿਪੋਜ਼ੀਟਰੀ (repository) ਸਟੋਰ ਨਹੀਂ ਕਰਦਾ। ਇਹ ਸਮੱਗਰੀ (content) ਨੂੰ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਸਟੋਰ ਕਰਦਾ ਹੈ ਅਤੇ ਫਾਈਲਾਂ ਅਤੇ ਕਮਿਟਸ (commits) ਨੂੰ ਜੋੜਨ ਲਈ ਰੈਫਰੈਂਸਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।
ਮੈਂ ਤਿੰਨ ਮੁੱਖ ਹਿੱਸਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣਾ ਸਿਸਟਮ ਬਣਾਇਆ:
- Metadata: ਇਹ ਪ੍ਰੋਜੈਕਟਾਂ, ਮਾਲਕਾਂ ਅਤੇ ਫੋਲਡਰਾਂ ਲਈ IDs ਸਟੋਰ ਕਰਦਾ ਹੈ।
- File Records: ਇਹ ਫਾਈਲਾਂ ਦੇ ਨਾਮ ਅਤੇ ਸਮੱਗਰੀ ਦੇ ਲਿੰਕ ਸਟੋਰ ਕਰਦੇ ਹਨ।
- Blobs: ਇੱਥੇ ਅਸਲ ਸਮੱਗਰੀ ਸਟੋਰ ਹੁੰਦੀ ਹੈ।
ਇਹ ਸਿਸਟਮ content hashing ਰਾਹੀਂ ਕੰਮ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਫਾਈਲ ਸੇਵ ਕਰਦੇ ਹੋ, ਤਾਂ ਸਿਸਟਮ ਸਮੱਗਰੀ ਦੇ ਅਧਾਰ 'ਤੇ ਇੱਕ ਵਿਲੱਖਣ ID ਬਣਾਉਂਦਾ ਹੈ। ਜੇਕਰ ਉਹ ਸਮੱਗਰੀ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਸਿਸਟਮ ਮੌਜੂਦਾ Blob ਦੀ ਹੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਇਹ ਨਵਾਂ Blob ਨਹੀਂ ਬਣਾਉਂਦਾ।
ਇਹ ਤਰੀਕਾ forking ਨੂੰ ਆਸਾਨ ਅਤੇ ਸਸਤਾ ਬਣਾਉਂਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਕਿਸੇ ਪ੍ਰੋਜੈਕਟ ਨੂੰ fork ਕਰਦੇ ਹੋ:
- ਸਿਸਟਮ ਇੱਕ ਨਵੀਂ Project ID ਬਣਾਉਂਦਾ ਹੈ।
- ਇਹ ਫਾਈਲਾਂ ਅਤੇ ਫੋਲਡਰਾਂ ਲਈ ਨਵਾਂ metadata ਬਣਾਉਂਦਾ ਹੈ।
- ਇਹ ਨਵੇਂ metadata ਨੂੰ ਮੌਜੂਦਾ Blobs ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।
ਫੋਰਕ ਦੌਰਾਨ ਫਾਈਲ ਦੀ ਅਸਲ ਸਮੱਗਰੀ ਦੀ ਕਾਪੀ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ। ਤੁਸੀਂ ਸਿਰਫ਼ ਛੋਟੇ metadata ਰਿਕਾਰਡਾਂ ਦੀ ਦੁਹਰਾਓ ਕਰਦੇ ਹੋ।
ਜਦੋਂ ਤੁਸੀਂ ਕਿਸੇ fork ਨੂੰ edit ਕਰਦੇ ਹੋ, ਤਾਂ ਪ੍ਰਕਿਰਿਆ ਕੁਸ਼ਲ ਰਹਿੰਦੀ ਹੈ:
- ਤੁਸੀਂ ਸਮੱਗਰੀ ਬਦਲਦੇ ਹੋ।
- ਸਿਸਟਮ ਨਵੀਂ ਸਮੱਗਰੀ ਨੂੰ hash ਕਰਦਾ ਹੈ।
- ਇਹ ਨਵਾਂ Blob ਉਦੋਂ ਹੀ ਬਣਾਉਂਦਾ ਹੈ ਜੇਕਰ ਉਹ ਬਿਲਕੁਲ ਉਹੀ ਸਮੱਗਰੀ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।
- ਤੁਹਾਡੇ fork ਲਈ metadata ਨਵੇਂ Blob ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।
- ਅਸਲ ਪ੍ਰੋਜੈਕਟ ਅਜੇ ਵੀ ਪੁਰਾਣੇ Blob ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।
ਇਹ ਵਿਧੀ ਕਈ ਫਾਇਦੇ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ:
- Content deduplication ਨਾਲ ਬਹੁਤ ਜ਼ਿਆਦਾ ਜਗ੍ਹਾ ਬਚਦੀ ਹੈ।
- Forking ਤੁਰੰਤ ਹੁੰਦੀ ਹੈ।
- Version management ਸੰਗਠਿਤ ਰਹਿੰਦਾ ਹੈ।
- Database ਦਾ ਵਾਧਾ ਹੌਲੀ ਰਹਿੰਦਾ ਹੈ।
ਤੁਹਾਨੂੰ ਭਾਰੀ ਸਟੋਰੇਜ ਦੇ ਬੋਝ ਤੋਂ ਬਿਨਾਂ GitHub ਵਰਗੀ ਕਾਰਜਸ਼ੀਲਤਾ ਮਿਲਦੀ ਹੈ।