Git ನಲ್ಲಿ ಬ್ಲಾಬ್ ಸ್ಟ್ರಿಪ್ಪಿಂಗ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
Git ನಲ್ಲಿ, ದೊಡ್ಡ ಫೈಲ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಒಂದು ಸವಾಲಾಗಿರಬಹುದು, ವಿಶೇಷವಾಗಿ ಕೆಲಸ ಮಾಡುವ ಪ್ರತಿಯಲ್ಲಿ ಅವುಗಳು ಇನ್ನು ಮುಂದೆ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದಾಗ. ನಿಮ್ಮ ರೆಪೊಸಿಟರಿಯ ಇತಿಹಾಸದಿಂದ ಈ ದೊಡ್ಡ ಫೈಲ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು BFG ಮತ್ತು Git ಫಿಲ್ಟರ್-ರೆಪೊದಂತಹ ಪರಿಕರಗಳು ಪರಿಹಾರಗಳನ್ನು ನೀಡುತ್ತವೆ. ಆದಾಗ್ಯೂ, BFG ಯಂತೆಯೇ Git ಫಿಲ್ಟರ್-ರೆಪೊದೊಂದಿಗೆ ಅದೇ ಫಲಿತಾಂಶಗಳನ್ನು ಸಾಧಿಸುವುದು ಟ್ರಿಕಿ ಆಗಿರಬಹುದು.
ಈ ಲೇಖನವು BFG ಆಜ್ಞೆಯನ್ನು ಹೇಗೆ ಪುನರಾವರ್ತಿಸುವುದು ಎಂಬುದನ್ನು ಪರಿಶೋಧಿಸುತ್ತದೆ --ಸ್ಟ್ರಿಪ್-ಬ್ಲಾಬ್ಸ್-ದೊಡ್ಡದು Git ಫಿಲ್ಟರ್-ರೆಪೋ ಬಳಸಿ. ನಾವು ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತೇವೆ ಮತ್ತು ಇನ್ನೂ ಬಳಕೆಯಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ಆಕಸ್ಮಿಕವಾಗಿ ತೆಗೆದುಹಾಕದೆಯೇ ನಿಮ್ಮ ರೆಪೊಸಿಟರಿಯನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಸ್ವಚ್ಛಗೊಳಿಸಬಹುದು ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಹಂತ-ಹಂತದ ಮಾರ್ಗದರ್ಶಿಯನ್ನು ಒದಗಿಸುತ್ತೇವೆ.
ಆಜ್ಞೆ | ವಿವರಣೆ |
---|---|
from git import Repo | Git ರೆಪೊಸಿಟರಿಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು GitPython ಲೈಬ್ರರಿಯ Repo ವರ್ಗವನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳುತ್ತದೆ. |
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 ಫಿಲ್ಟರ್-ರೆಪೋ ಆಜ್ಞೆಯನ್ನು ಅನ್ವಯಿಸಲು xargs ಅನ್ನು ಬಳಸುತ್ತದೆ. |
ಒದಗಿಸಿದ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ
Git ರೆಪೊಸಿಟರಿಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ GitPython ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ. ರೆಪೊಸಿಟರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ from git import Repo ಮತ್ತು repo = Repo(repo_path), ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ರೆಪೊಸಿಟರಿ ಮಾರ್ಗವನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಸ್ಕ್ರಿಪ್ಟ್ ನಂತರ ಫಿಲ್ಟರ್ ಕಾರ್ಯವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ filter_large_blobs(blob) 10MB ಗಿಂತ ದೊಡ್ಡ ಬ್ಲಬ್ಗಳನ್ನು ಗುರುತಿಸಲು. ಈ ಫಿಲ್ಟರ್ ಅನ್ನು ಬಳಸಿ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ RepoFilter(repo).filter_blobs(filter_large_blobs), ಇದು ಗಾತ್ರದ ಮಿತಿಯನ್ನು ಮೀರಿದ ಬ್ಲಾಬ್ಗಳನ್ನು ರೆಪೊಸಿಟರಿಯ ಇತಿಹಾಸದಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
Git ಆಜ್ಞೆಗಳು ಮತ್ತು ಶೆಲ್ ಉಪಯುಕ್ತತೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಶೆಲ್ ಸ್ಕ್ರಿಪ್ಟ್ ಇದೇ ಗುರಿಯನ್ನು ಸಾಧಿಸುತ್ತದೆ. ಇದು ರೆಪೊಸಿಟರಿ ಡೈರೆಕ್ಟರಿಗೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡುತ್ತದೆ cd $REPO_PATH ಮತ್ತು ಬಳಸುವ ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ git rev-list --objects --all. ಪ್ರತಿಯೊಂದು ವಸ್ತುವನ್ನು ಅದರ ಗಾತ್ರಕ್ಕಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ git cat-file --batch-check. ನಿಗದಿತ ಗಾತ್ರದ ಮಿತಿಗಿಂತ ದೊಡ್ಡದಾದ ವಸ್ತುಗಳನ್ನು ಬಳಸಿ ಫಿಲ್ಟರ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ xargs ಅನ್ವಯಿಸಲು git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT ಪ್ರತಿ ಗುರುತಿಸಲಾದ ದೊಡ್ಡ ಬೊಟ್ಟುಗೆ. ಈ ವಿಧಾನವು ರೆಪೊಸಿಟರಿಯಿಂದ ದೊಡ್ಡ ಬ್ಲಾಬ್ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ, ಅನಗತ್ಯ ದೊಡ್ಡ ಫೈಲ್ಗಳಿಲ್ಲದೆ ಶುದ್ಧ ಇತಿಹಾಸವನ್ನು ಖಾತ್ರಿಗೊಳಿಸುತ್ತದೆ.
ಗಾತ್ರದ ಮೂಲಕ Git Blobs ಅನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಪೈಥಾನ್ ಅನ್ನು ಬಳಸುವುದು
ದೊಡ್ಡ ಬ್ಲಾಬ್ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್
# 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 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 ಫಿಲ್ಟರ್-ರೆಪೋ ಆಯ್ಕೆಗಳನ್ನು ಅನ್ವೇಷಿಸಲಾಗುತ್ತಿದೆ
ಹಾಗೆಯೇ git filter-repo --strip-blobs-bigger-than ದೊಡ್ಡ ಫೈಲ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ, ನಿಮ್ಮ ರೆಪೊಸಿಟರಿ ಕ್ಲೀನಪ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಹೆಚ್ಚುವರಿ ಆಯ್ಕೆಗಳಿವೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಬಳಸಬಹುದು --path ನಿರ್ದಿಷ್ಟ ಫೈಲ್ಗಳು ಅಥವಾ ಡೈರೆಕ್ಟರಿಗಳಿಗೆ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಮಿತಿಗೊಳಿಸಲು. ಬೊಟ್ಟು ತೆಗೆಯಲು ನಿಮ್ಮ ರೆಪೊಸಿಟರಿಯ ಕೆಲವು ಪ್ರದೇಶಗಳನ್ನು ಮಾತ್ರ ಗುರಿಯಾಗಿಸಲು ಇದು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಮತ್ತೊಂದು ಉಪಯುಕ್ತ ಆಯ್ಕೆಯಾಗಿದೆ --invert-paths, ಇದು ಕಾರ್ಯಾಚರಣೆಯಿಂದ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಮಾರ್ಗಗಳನ್ನು ಹೊರತುಪಡಿಸುತ್ತದೆ, ಯಾವ ಫೈಲ್ಗಳು ಅಸ್ಪೃಶ್ಯವಾಗಿ ಉಳಿಯುತ್ತವೆ ಎಂಬುದರ ಮೇಲೆ ಹೆಚ್ಚಿನ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ.
ಇದಲ್ಲದೆ, ನೀವು ಸಂಯೋಜಿಸಬಹುದು --strip-blobs-bigger-than ಜೊತೆಗೆ --analyze ಅವುಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು ಬದಲಾವಣೆಗಳನ್ನು ಪೂರ್ವವೀಕ್ಷಿಸಲು. ಏನನ್ನು ತೆಗೆದುಹಾಕಲಾಗುವುದು ಎಂಬುದರ ವಿವರವಾದ ವರದಿಯನ್ನು ಒದಗಿಸುವ ಮೂಲಕ ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಅಳಿಸುವಿಕೆಗಳನ್ನು ತಪ್ಪಿಸಲು ಇದು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಈ ಸುಧಾರಿತ ಆಯ್ಕೆಗಳನ್ನು ಬಳಸುವುದರಿಂದ ನಿಮ್ಮ ರೆಪೊಸಿಟರಿ ನಿರ್ವಹಣಾ ಕಾರ್ಯಗಳ ನಮ್ಯತೆ ಮತ್ತು ನಿಖರತೆಯನ್ನು ಹೆಚ್ಚಿಸಬಹುದು, ಸ್ವಚ್ಛ ಮತ್ತು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿ ಯೋಜನೆಯ ಇತಿಹಾಸವನ್ನು ಖಾತ್ರಿಪಡಿಸಿಕೊಳ್ಳಬಹುದು.
Git ಫಿಲ್ಟರ್-ರೆಪೋದಲ್ಲಿ ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು
- ಏನು ಮಾಡುತ್ತದೆ 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 ತೆಗೆದುಹಾಕಲು ಗುರುತಿಸಲಾದ ದೊಡ್ಡ ಬ್ಲಾಬ್ಗಳಂತಹ ಐಟಂಗಳ ಪಟ್ಟಿಗೆ ಆಜ್ಞೆಗಳನ್ನು ಅನ್ವಯಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
Git Blob ನಿರ್ವಹಣೆಯ ಅಂತಿಮ ಆಲೋಚನೆಗಳು
ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸಂಗ್ರಹಣೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಲು Git ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ದೊಡ್ಡ ಫೈಲ್ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುವುದು ಅತ್ಯಗತ್ಯ. BFG ಮತ್ತು Git ಫಿಲ್ಟರ್-ರೆಪೋದಂತಹ ಸಾಧನಗಳನ್ನು ಬಳಸುವುದು ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸುಗಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಆದರೂ ಪ್ರತಿಯೊಂದೂ ವಿಶಿಷ್ಟವಾದ ಆಜ್ಞೆಗಳು ಮತ್ತು ವಿಧಾನಗಳನ್ನು ಹೊಂದಿದೆ. ಸುಧಾರಿತ ಆಯ್ಕೆಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಮತ್ತು ಪ್ರತಿ ಉಪಕರಣದ ಸೂಕ್ಷ್ಮ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ನಿಮ್ಮ ರೆಪೊಸಿಟರಿಯು ಸ್ವಚ್ಛವಾಗಿ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಉಳಿದಿದೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಡೇಟಾ ನಷ್ಟವನ್ನು ತಪ್ಪಿಸಲು ಗಮನಾರ್ಹ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡುವ ಮೊದಲು ನಿಮ್ಮ ರೆಪೊಸಿಟರಿಯನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಯಾವಾಗಲೂ ಮರೆಯದಿರಿ. ಈ ಪರಿಕರಗಳ ಜ್ಞಾನವನ್ನು ಕಾರ್ಯತಂತ್ರದ ಯೋಜನೆಯೊಂದಿಗೆ ಸಂಯೋಜಿಸುವುದು ನಿಮ್ಮ ಆವೃತ್ತಿ ನಿಯಂತ್ರಣ ಅಭ್ಯಾಸಗಳನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಹೆಚ್ಚಿಸುತ್ತದೆ.