ਗਿੱਟ ਵਿੱਚ ਬਲੌਬ ਸਟ੍ਰਿਪਿੰਗ ਨੂੰ ਸਮਝਣਾ
Git ਵਿੱਚ, ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ ਇੱਕ ਚੁਣੌਤੀ ਹੋ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਉਹਨਾਂ ਦੀ ਕੰਮ ਕਰਨ ਵਾਲੀ ਕਾਪੀ ਵਿੱਚ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਹੈ। BFG ਅਤੇ Git Filter-Repo ਵਰਗੇ ਟੂਲ ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਦੇ ਇਤਿਹਾਸ ਤੋਂ ਇਹਨਾਂ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਹੱਲ ਪੇਸ਼ ਕਰਦੇ ਹਨ। ਹਾਲਾਂਕਿ, Git Filter-Repo ਨਾਲ BFG ਦੇ ਨਾਲ ਉਹੀ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰਨਾ ਔਖਾ ਹੋ ਸਕਦਾ ਹੈ।
ਇਹ ਲੇਖ ਖੋਜ ਕਰਦਾ ਹੈ ਕਿ BFG ਕਮਾਂਡ ਨੂੰ ਕਿਵੇਂ ਦੁਹਰਾਉਣਾ ਹੈ --ਸਟਰਿਪ-ਬਲੌਬਸ-ਤੋਂ ਵੱਡੀ ਗਿੱਟ ਫਿਲਟਰ-ਰੇਪੋ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ. ਅਸੀਂ ਆਮ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਾਂਗੇ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਇੱਕ ਕਦਮ-ਦਰ-ਕਦਮ ਗਾਈਡ ਪ੍ਰਦਾਨ ਕਰਾਂਗੇ ਕਿ ਤੁਸੀਂ ਅਜੇ ਵੀ ਵਰਤੋਂ ਵਿੱਚ ਫਾਈਲਾਂ ਨੂੰ ਗਲਤੀ ਨਾਲ ਹਟਾਏ ਬਿਨਾਂ ਆਪਣੀ ਰਿਪੋਜ਼ਟਰੀ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਸਾਫ਼ ਕਰ ਸਕਦੇ ਹੋ।
ਹੁਕਮ | ਵਰਣਨ |
---|---|
from git import Repo | Git ਰਿਪੋਜ਼ਟਰੀ ਨਾਲ ਇੰਟਰੈਕਟ ਕਰਨ ਲਈ GitPython ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਰੇਪੋ ਕਲਾਸ ਨੂੰ ਆਯਾਤ ਕਰਦਾ ਹੈ। |
git_filter_repo import RepoFilter | ਰਿਪੋਜ਼ਟਰੀ ਬਲੌਬ ਫਿਲਟਰ ਕਰਨ ਲਈ git-filter-repo ਤੋਂ RepoFilter ਕਲਾਸ ਆਯਾਤ ਕਰਦਾ ਹੈ। |
repo = Repo(repo_path) | ਨਿਰਧਾਰਤ ਰਿਪੋਜ਼ਟਰੀ ਮਾਰਗ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੇ ਹੋਏ ਇੱਕ ਰੇਪੋ ਆਬਜੈਕਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ। |
RepoFilter(repo).filter_blobs(filter_large_blobs) | ਰਿਪੋਜ਼ਟਰੀ ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਨੂੰ ਹਟਾਉਣ ਲਈ ਇੱਕ ਕਸਟਮ ਫਿਲਟਰ ਫੰਕਸ਼ਨ ਲਾਗੂ ਕਰਦਾ ਹੈ। |
git rev-list --objects --all | ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਸਾਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਬਲੌਬਸ, ਟ੍ਰੀਜ਼ ਅਤੇ ਕਮਿਟ ਸ਼ਾਮਲ ਹਨ। |
git cat-file --batch-check | ਵਸਤੂਆਂ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਉਹਨਾਂ ਦੇ ਆਕਾਰ ਸਮੇਤ. |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT | ਪਛਾਣੇ ਗਏ ਹਰੇਕ ਵੱਡੇ ਬਲੌਬ 'ਤੇ git filter-repo ਕਮਾਂਡ ਲਾਗੂ ਕਰਨ ਲਈ xargs ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। |
ਪ੍ਰਦਾਨ ਕੀਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਕਿਵੇਂ ਕੰਮ ਕਰਦੀਆਂ ਹਨ
ਪਾਈਥਨ ਸਕ੍ਰਿਪਟ ਗਿੱਟ ਰਿਪੋਜ਼ਟਰੀ ਨਾਲ ਇੰਟਰੈਕਟ ਕਰਨ ਲਈ GitPython ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। ਰਿਪੋਜ਼ਟਰੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ from git import Repo ਅਤੇ repo = Repo(repo_path), ਖਾਸ ਰਿਪੋਜ਼ਟਰੀ ਮਾਰਗ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੇ ਹੋਏ। ਸਕ੍ਰਿਪਟ ਫਿਰ ਇੱਕ ਫਿਲਟਰ ਫੰਕਸ਼ਨ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੀ ਹੈ filter_large_blobs(blob) 10MB ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ। ਇਸ ਫਿਲਟਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ RepoFilter(repo).filter_blobs(filter_large_blobs), ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਆਕਾਰ ਸੀਮਾ ਤੋਂ ਵੱਧ ਬਲੌਬਸ ਰਿਪੋਜ਼ਟਰੀ ਦੇ ਇਤਿਹਾਸ ਤੋਂ ਹਟਾ ਦਿੱਤੇ ਗਏ ਹਨ।
ਸ਼ੈੱਲ ਸਕ੍ਰਿਪਟ ਗਿੱਟ ਕਮਾਂਡਾਂ ਅਤੇ ਸ਼ੈੱਲ ਉਪਯੋਗਤਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਸਮਾਨ ਟੀਚਾ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ। ਇਹ ਨਾਲ ਰਿਪੋਜ਼ਟਰੀ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਨੈਵੀਗੇਟ ਕਰਦਾ ਹੈ cd $REPO_PATH ਅਤੇ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਸਾਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ git rev-list --objects --all. ਹਰੇਕ ਵਸਤੂ ਨੂੰ ਇਸਦੇ ਆਕਾਰ ਲਈ ਜਾਂਚਿਆ ਜਾਂਦਾ ਹੈ git cat-file --batch-check. ਨਿਰਧਾਰਤ ਆਕਾਰ ਸੀਮਾ ਤੋਂ ਵੱਡੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਫਿਲਟਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਵਰਤ ਕੇ ਸੰਸਾਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ xargs ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT ਹਰੇਕ ਪਛਾਣੇ ਗਏ ਵੱਡੇ ਬਲੌਬ ਲਈ। ਇਹ ਵਿਧੀ ਰਿਪੋਜ਼ਟਰੀ ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਹਟਾਉਂਦੀ ਹੈ, ਬੇਲੋੜੀਆਂ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਤੋਂ ਬਿਨਾਂ ਇੱਕ ਸਾਫ਼ ਇਤਿਹਾਸ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
ਆਕਾਰ ਦੁਆਰਾ ਗਿੱਟ ਬਲੌਬਸ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਲਈ ਪਾਈਥਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਵੱਡੇ ਬਲੌਬ ਫਿਲਟਰ ਕਰਨ ਲਈ ਪਾਈਥਨ ਸਕ੍ਰਿਪਟ
# Import necessary modules
import os
from git import Repo
from git_filter_repo import RepoFilter
# Define the repository path and size limit
repo_path = 'path/to/your/repo'
size_limit = 10 * 1024 * 1024 # 10 MB
# Initialize the repository
repo = Repo(repo_path)
# Define a filter function to remove large blobs
def filter_large_blobs(blob):
return blob.size > size_limit
# Apply the filter to the repository
RepoFilter(repo).filter_blobs(filter_large_blobs)
ਵੱਡੇ ਗਿੱਟ ਬਲੌਬਸ ਦੀ ਪਛਾਣ ਕਰਨ ਅਤੇ ਹਟਾਉਣ ਲਈ ਸ਼ੈੱਲ ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
Git ਵਿੱਚ ਬਲੌਬ ਪ੍ਰਬੰਧਨ ਲਈ ਸ਼ੈੱਲ ਸਕ੍ਰਿਪਟਿੰਗ
#!/bin/bash
# Define repository path and size limit
REPO_PATH="path/to/your/repo"
SIZE_LIMIT=10485760 # 10 MB
# Navigate to the repository
cd $REPO_PATH
# List blobs larger than the size limit
git rev-list --objects --all |
git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' |
awk '$3 >= $SIZE_LIMIT {print $1}' |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT
echo "Large blobs removed from the repository"
ਐਡਵਾਂਸਡ ਗਿੱਟ ਫਿਲਟਰ-ਰੇਪੋ ਵਿਕਲਪਾਂ ਦੀ ਪੜਚੋਲ ਕਰਨਾ
ਜਦਕਿ git filter-repo --strip-blobs-bigger-than ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ, ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਸਫਾਈ ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨ ਲਈ ਵਾਧੂ ਵਿਕਲਪ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਤੁਸੀਂ ਵਰਤ ਸਕਦੇ ਹੋ --path ਓਪਰੇਸ਼ਨ ਨੂੰ ਖਾਸ ਫਾਈਲਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀਆਂ ਤੱਕ ਸੀਮਤ ਕਰਨ ਲਈ। ਇਹ ਤੁਹਾਨੂੰ ਬਲੌਬ ਹਟਾਉਣ ਲਈ ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਦੇ ਕੁਝ ਖਾਸ ਖੇਤਰਾਂ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇੱਕ ਹੋਰ ਲਾਭਦਾਇਕ ਵਿਕਲਪ ਹੈ --invert-paths, ਜੋ ਓਪਰੇਸ਼ਨ ਤੋਂ ਨਿਸ਼ਚਿਤ ਮਾਰਗਾਂ ਨੂੰ ਬਾਹਰ ਕੱਢਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਹੋਰ ਨਿਯੰਤਰਣ ਦੀ ਪੇਸ਼ਕਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਕਿਹੜੀਆਂ ਫਾਈਲਾਂ ਅਣਛੂਹੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ।
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਤੁਸੀਂ ਜੋੜ ਸਕਦੇ ਹੋ --strip-blobs-bigger-than ਨਾਲ --analyze ਉਹਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤਬਦੀਲੀਆਂ ਦੀ ਝਲਕ ਵੇਖਣ ਲਈ। ਇਹ ਕੀ ਹਟਾਇਆ ਜਾਵੇਗਾ ਦੀ ਵਿਸਤ੍ਰਿਤ ਰਿਪੋਰਟ ਪ੍ਰਦਾਨ ਕਰਕੇ ਅਣਜਾਣੇ ਵਿੱਚ ਮਿਟਾਏ ਜਾਣ ਤੋਂ ਬਚਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਇਹਨਾਂ ਉੱਨਤ ਵਿਕਲਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਤੁਹਾਡੇ ਰਿਪੋਜ਼ਟਰੀ ਮੇਨਟੇਨੈਂਸ ਕਾਰਜਾਂ ਦੀ ਲਚਕਤਾ ਅਤੇ ਸ਼ੁੱਧਤਾ ਨੂੰ ਵਧਾ ਸਕਦਾ ਹੈ, ਇੱਕ ਸਾਫ਼ ਅਤੇ ਵਧੇਰੇ ਕੁਸ਼ਲ ਪ੍ਰੋਜੈਕਟ ਇਤਿਹਾਸ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
Git Filter-Repo 'ਤੇ ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸਵਾਲ
- ਕੀ ਇਹ git filter-repo --strip-blobs-bigger-than ਕਰਦੇ ਹਾਂ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਇਤਿਹਾਸ ਤੋਂ ਨਿਰਧਾਰਤ ਆਕਾਰ ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਨੂੰ ਹਟਾਉਂਦਾ ਹੈ।
- ਕਿਵੇਂ ਕਰਦਾ ਹੈ --invert-paths ਕੰਮ?
- ਇਹ ਫਿਲਟਰ ਦੁਆਰਾ ਪ੍ਰਕਿਰਿਆ ਕੀਤੇ ਜਾਣ ਤੋਂ ਨਿਰਧਾਰਤ ਮਾਰਗਾਂ ਨੂੰ ਬਾਹਰ ਰੱਖਦਾ ਹੈ।
- ਕੀ ਮੈਂ ਉਹਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤਬਦੀਲੀਆਂ ਦਾ ਪੂਰਵਦਰਸ਼ਨ ਕਰ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਵਰਤ ਕੇ --analyze ਤਬਦੀਲੀਆਂ ਦੀ ਵਿਸਤ੍ਰਿਤ ਰਿਪੋਰਟ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
- ਮੈਂ ਖਾਸ ਫਾਈਲਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਕਿਵੇਂ ਨਿਸ਼ਾਨਾ ਬਣਾਵਾਂ?
- ਦੀ ਵਰਤੋਂ ਕਰੋ --path ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਖਾਸ ਮਾਰਗਾਂ ਤੱਕ ਸੀਮਤ ਕਰਨ ਦਾ ਵਿਕਲਪ।
- ਦਾ ਮਕਸਦ ਕੀ ਹੈ RepoFilter ਪਾਈਥਨ ਵਿੱਚ ਕਲਾਸ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਕਸਟਮ ਫਿਲਟਰਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
- ਦੁਆਰਾ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਅਨਡੂ ਕਰਨ ਦਾ ਕੋਈ ਤਰੀਕਾ ਹੈ git filter-repo?
- ਇੱਕ ਵਾਰ ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਉਹਨਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਹਮੇਸ਼ਾ ਪਹਿਲਾਂ ਆਪਣੀ ਰਿਪੋਜ਼ਟਰੀ ਦਾ ਬੈਕਅੱਪ ਲਓ।
- ਕੀ ਇਹ git rev-list --objects --all ਕਰਦੇ ਹਾਂ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਸਾਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਬਲੌਬਸ, ਟ੍ਰੀਜ਼ ਅਤੇ ਕਮਿਟ ਸ਼ਾਮਲ ਹਨ।
- ਕਿਉਂ ਵਰਤੋ xargs ਨਾਲ git filter-repo?
- xargs ਆਈਟਮਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਕਮਾਂਡਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਹਟਾਉਣ ਲਈ ਪਛਾਣੇ ਗਏ ਵੱਡੇ ਬਲੌਬ।
ਗਿੱਟ ਬਲੌਬ ਪ੍ਰਬੰਧਨ 'ਤੇ ਅੰਤਮ ਵਿਚਾਰ
ਇੱਕ ਗਿੱਟ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਦਾ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਪ੍ਰਬੰਧਨ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਸਟੋਰੇਜ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਲਈ ਜ਼ਰੂਰੀ ਹੈ। BFG ਅਤੇ Git Filter-Repo ਵਰਗੇ ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਇਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਸੁਚਾਰੂ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਹਾਲਾਂਕਿ ਹਰੇਕ ਕੋਲ ਵਿਲੱਖਣ ਕਮਾਂਡਾਂ ਅਤੇ ਵਿਧੀਆਂ ਹਨ। ਉੱਨਤ ਵਿਕਲਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਤੇ ਹਰੇਕ ਟੂਲ ਦੀਆਂ ਬਾਰੀਕੀਆਂ ਨੂੰ ਸਮਝ ਕੇ, ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਸਾਫ਼ ਅਤੇ ਕੁਸ਼ਲ ਬਣੀ ਰਹੇ। ਡੇਟਾ ਦੇ ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਤਬਦੀਲੀਆਂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹਮੇਸ਼ਾ ਆਪਣੀ ਰਿਪੋਜ਼ਟਰੀ ਦਾ ਬੈਕਅੱਪ ਲੈਣਾ ਯਾਦ ਰੱਖੋ। ਰਣਨੀਤਕ ਯੋਜਨਾਬੰਦੀ ਦੇ ਨਾਲ ਇਹਨਾਂ ਸਾਧਨਾਂ ਦੇ ਗਿਆਨ ਨੂੰ ਜੋੜਨਾ ਤੁਹਾਡੇ ਸੰਸਕਰਣ ਨਿਯੰਤਰਣ ਅਭਿਆਸਾਂ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਵਾਧਾ ਕਰੇਗਾ।