ਗਿੱਟ ਵਿੱਚ ਬਲੌਬ ਸਟ੍ਰਿਪਿੰਗ ਨੂੰ ਸਮਝਣਾ
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 ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। ਰਿਪੋਜ਼ਟਰੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ , ਖਾਸ ਰਿਪੋਜ਼ਟਰੀ ਮਾਰਗ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੇ ਹੋਏ। ਸਕ੍ਰਿਪਟ ਫਿਰ ਇੱਕ ਫਿਲਟਰ ਫੰਕਸ਼ਨ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੀ ਹੈ 10MB ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ। ਇਸ ਫਿਲਟਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ RepoFilter(repo).filter_blobs(filter_large_blobs), ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਆਕਾਰ ਸੀਮਾ ਤੋਂ ਵੱਧ ਬਲੌਬਸ ਰਿਪੋਜ਼ਟਰੀ ਦੇ ਇਤਿਹਾਸ ਤੋਂ ਹਟਾ ਦਿੱਤੇ ਗਏ ਹਨ।
ਸ਼ੈੱਲ ਸਕ੍ਰਿਪਟ ਗਿੱਟ ਕਮਾਂਡਾਂ ਅਤੇ ਸ਼ੈੱਲ ਉਪਯੋਗਤਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਸਮਾਨ ਟੀਚਾ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ। ਇਹ ਨਾਲ ਰਿਪੋਜ਼ਟਰੀ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਨੈਵੀਗੇਟ ਕਰਦਾ ਹੈ ਅਤੇ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਸਾਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ . ਹਰੇਕ ਵਸਤੂ ਨੂੰ ਇਸਦੇ ਆਕਾਰ ਲਈ ਜਾਂਚਿਆ ਜਾਂਦਾ ਹੈ . ਨਿਰਧਾਰਤ ਆਕਾਰ ਸੀਮਾ ਤੋਂ ਵੱਡੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਫਿਲਟਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਵਰਤ ਕੇ ਸੰਸਾਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ xargs ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਹਰੇਕ ਪਛਾਣੇ ਗਏ ਵੱਡੇ ਬਲੌਬ ਲਈ। ਇਹ ਵਿਧੀ ਰਿਪੋਜ਼ਟਰੀ ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਹਟਾਉਂਦੀ ਹੈ, ਬੇਲੋੜੀਆਂ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਤੋਂ ਬਿਨਾਂ ਇੱਕ ਸਾਫ਼ ਇਤਿਹਾਸ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
ਆਕਾਰ ਦੁਆਰਾ ਗਿੱਟ ਬਲੌਬਸ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਲਈ ਪਾਈਥਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਵੱਡੇ ਬਲੌਬ ਫਿਲਟਰ ਕਰਨ ਲਈ ਪਾਈਥਨ ਸਕ੍ਰਿਪਟ
# 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"
ਐਡਵਾਂਸਡ ਗਿੱਟ ਫਿਲਟਰ-ਰੇਪੋ ਵਿਕਲਪਾਂ ਦੀ ਪੜਚੋਲ ਕਰਨਾ
ਜਦਕਿ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ, ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਸਫਾਈ ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨ ਲਈ ਵਾਧੂ ਵਿਕਲਪ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਤੁਸੀਂ ਵਰਤ ਸਕਦੇ ਹੋ ਓਪਰੇਸ਼ਨ ਨੂੰ ਖਾਸ ਫਾਈਲਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀਆਂ ਤੱਕ ਸੀਮਤ ਕਰਨ ਲਈ। ਇਹ ਤੁਹਾਨੂੰ ਬਲੌਬ ਹਟਾਉਣ ਲਈ ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਦੇ ਕੁਝ ਖਾਸ ਖੇਤਰਾਂ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇੱਕ ਹੋਰ ਲਾਭਦਾਇਕ ਵਿਕਲਪ ਹੈ , ਜੋ ਓਪਰੇਸ਼ਨ ਤੋਂ ਨਿਸ਼ਚਿਤ ਮਾਰਗਾਂ ਨੂੰ ਬਾਹਰ ਕੱਢਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਹੋਰ ਨਿਯੰਤਰਣ ਦੀ ਪੇਸ਼ਕਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਕਿਹੜੀਆਂ ਫਾਈਲਾਂ ਅਣਛੂਹੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ।
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਤੁਸੀਂ ਜੋੜ ਸਕਦੇ ਹੋ ਨਾਲ ਉਹਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤਬਦੀਲੀਆਂ ਦੀ ਝਲਕ ਵੇਖਣ ਲਈ। ਇਹ ਕੀ ਹਟਾਇਆ ਜਾਵੇਗਾ ਦੀ ਵਿਸਤ੍ਰਿਤ ਰਿਪੋਰਟ ਪ੍ਰਦਾਨ ਕਰਕੇ ਅਣਜਾਣੇ ਵਿੱਚ ਮਿਟਾਏ ਜਾਣ ਤੋਂ ਬਚਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਇਹਨਾਂ ਉੱਨਤ ਵਿਕਲਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਤੁਹਾਡੇ ਰਿਪੋਜ਼ਟਰੀ ਮੇਨਟੇਨੈਂਸ ਕਾਰਜਾਂ ਦੀ ਲਚਕਤਾ ਅਤੇ ਸ਼ੁੱਧਤਾ ਨੂੰ ਵਧਾ ਸਕਦਾ ਹੈ, ਇੱਕ ਸਾਫ਼ ਅਤੇ ਵਧੇਰੇ ਕੁਸ਼ਲ ਪ੍ਰੋਜੈਕਟ ਇਤਿਹਾਸ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
- ਕੀ ਇਹ ਕਰਦੇ ਹਾਂ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਇਤਿਹਾਸ ਤੋਂ ਨਿਰਧਾਰਤ ਆਕਾਰ ਤੋਂ ਵੱਡੇ ਬਲੌਬ ਨੂੰ ਹਟਾਉਂਦਾ ਹੈ।
- ਕਿਵੇਂ ਕਰਦਾ ਹੈ ਕੰਮ?
- ਇਹ ਫਿਲਟਰ ਦੁਆਰਾ ਪ੍ਰਕਿਰਿਆ ਕੀਤੇ ਜਾਣ ਤੋਂ ਨਿਰਧਾਰਤ ਮਾਰਗਾਂ ਨੂੰ ਬਾਹਰ ਰੱਖਦਾ ਹੈ।
- ਕੀ ਮੈਂ ਉਹਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤਬਦੀਲੀਆਂ ਦਾ ਪੂਰਵਦਰਸ਼ਨ ਕਰ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਵਰਤ ਕੇ ਤਬਦੀਲੀਆਂ ਦੀ ਵਿਸਤ੍ਰਿਤ ਰਿਪੋਰਟ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
- ਮੈਂ ਖਾਸ ਫਾਈਲਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਕਿਵੇਂ ਨਿਸ਼ਾਨਾ ਬਣਾਵਾਂ?
- ਦੀ ਵਰਤੋਂ ਕਰੋ ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਖਾਸ ਮਾਰਗਾਂ ਤੱਕ ਸੀਮਤ ਕਰਨ ਦਾ ਵਿਕਲਪ।
- ਦਾ ਮਕਸਦ ਕੀ ਹੈ ਪਾਈਥਨ ਵਿੱਚ ਕਲਾਸ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਕਸਟਮ ਫਿਲਟਰਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
- ਦੁਆਰਾ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਅਨਡੂ ਕਰਨ ਦਾ ਕੋਈ ਤਰੀਕਾ ਹੈ ?
- ਇੱਕ ਵਾਰ ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਉਹਨਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਹਮੇਸ਼ਾ ਪਹਿਲਾਂ ਆਪਣੀ ਰਿਪੋਜ਼ਟਰੀ ਦਾ ਬੈਕਅੱਪ ਲਓ।
- ਕੀ ਇਹ ਕਰਦੇ ਹਾਂ?
- ਇਹ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਸਾਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਬਲੌਬਸ, ਟ੍ਰੀਜ਼ ਅਤੇ ਕਮਿਟ ਸ਼ਾਮਲ ਹਨ।
- ਕਿਉਂ ਵਰਤੋ ਨਾਲ ?
- ਆਈਟਮਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਕਮਾਂਡਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਹਟਾਉਣ ਲਈ ਪਛਾਣੇ ਗਏ ਵੱਡੇ ਬਲੌਬ।
ਇੱਕ ਗਿੱਟ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਦਾ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਪ੍ਰਬੰਧਨ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਸਟੋਰੇਜ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਲਈ ਜ਼ਰੂਰੀ ਹੈ। BFG ਅਤੇ Git Filter-Repo ਵਰਗੇ ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਇਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਸੁਚਾਰੂ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਹਾਲਾਂਕਿ ਹਰੇਕ ਕੋਲ ਵਿਲੱਖਣ ਕਮਾਂਡਾਂ ਅਤੇ ਵਿਧੀਆਂ ਹਨ। ਉੱਨਤ ਵਿਕਲਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਤੇ ਹਰੇਕ ਟੂਲ ਦੀਆਂ ਬਾਰੀਕੀਆਂ ਨੂੰ ਸਮਝ ਕੇ, ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੀ ਰਿਪੋਜ਼ਟਰੀ ਸਾਫ਼ ਅਤੇ ਕੁਸ਼ਲ ਬਣੀ ਰਹੇ। ਡੇਟਾ ਦੇ ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਤਬਦੀਲੀਆਂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹਮੇਸ਼ਾ ਆਪਣੀ ਰਿਪੋਜ਼ਟਰੀ ਦਾ ਬੈਕਅੱਪ ਲੈਣਾ ਯਾਦ ਰੱਖੋ। ਰਣਨੀਤਕ ਯੋਜਨਾਬੰਦੀ ਦੇ ਨਾਲ ਇਹਨਾਂ ਸਾਧਨਾਂ ਦੇ ਗਿਆਨ ਨੂੰ ਜੋੜਨਾ ਤੁਹਾਡੇ ਸੰਸਕਰਣ ਨਿਯੰਤਰਣ ਅਭਿਆਸਾਂ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਵਾਧਾ ਕਰੇਗਾ।