Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
Something like automatically ignoring all .pdf files for which a .tex of the same name exists? We can do something close to that. We can reject the commit if your change list contains pdf and ...
Answer
#4: Post edited
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
- # Print the offending files.
- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
- You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
- Of course, it's strange that these files are getting accidentally added to the change list at all. Are you using `git add .` or similar? Perhaps use `git add -ip` to have git interactively prompt you about each change so you can review them.
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 1 lonely
- # 1 other
- # 1 singular
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
- # Print the offending files.
- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
- You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
- Of course, it's strange that these files are getting accidentally added to the change list at all. Are you using `git add .` or similar? Perhaps use `git add -ip` to have git interactively prompt you about each change so you can review them.
#3: Post edited
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
- # Print the offending files.
- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
- # Print the offending files.
- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
- You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
- Of course, it's strange that these files are getting accidentally added to the change list at all. Are you using `git add .` or similar? Perhaps use `git add -ip` to have git interactively prompt you about each change so you can review them.
#2: Post edited
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
# Print the output of $counts# For all lines where- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
- You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
- > Something like automatically ignoring all .pdf files for which a .tex of the same name exists?
- We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection.
- Create a file in your `.git/hooks` folder with the name `pre-commit`.
- ```sh
- #!/bin/sh
- # This is just to provide a way to bypass just this check.
- if test -n "${SKIP_PDF_CHECK+1}"
- then
- echo "Check for PDF generated files in commit skipped."
- exit 0
- fi
- # This command creates a table of file name and the number of times the name appears in the output of git diff.
- # Example input / output:
- # Given git diff shows these changed files:
- # lonely.pdf
- # other.pdf
- # singular.tex
- # oops.pdf
- # oops.tex
- # oops.odd.periods.pdf
- # oops.odd.periods.tex
- # counts will be:
- # 2 oops
- # 2 oops.odd.periods
- #
- # Comments for each command:
- # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- # Filter down to just the files that end in pdf or tex
- # Remove the extension.
- # Sort the list in preparation for uniq
- # Show only unique lines and include the count
- counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c)
- # Print the output of $counts
- # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension.
- if echo "$counts" | awk '$1 > 1 {exit 1}'
- then
- echo "No generated files detected in commit."
- # Allow git commit.
- exit 0
- else
- echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit";
- # Print the offending files.
- echo "$counts" | awk '$1 > 1 {print $2}'
- # Prevent git commit.
- exit 1
- fi
- ```
- This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`.
- You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.
#1: Initial revision
> Something like automatically ignoring all .pdf files for which a .tex of the same name exists? We can do something close to that. We can reject the commit if your change list contains pdf and tex files with the same name and path with a git hook. You can then remove the files and try again. This will only work for your repository, your collaborators will have to also put this hook in their repository to get the same protection. Create a file in your `.git/hooks` folder with the name `pre-commit`. ```sh #!/bin/sh # This is just to provide a way to bypass just this check. if test -n "${SKIP_PDF_CHECK+1}" then echo "Check for PDF generated files in commit skipped." exit 0 fi # This command creates a table of file name and the number of times the name appears in the output of git diff. # Example input / output: # Given git diff shows these changed files: # lonely.pdf # other.pdf # singular.tex # oops.pdf # oops.tex # oops.odd.periods.pdf # oops.odd.periods.tex # counts will be: # 2 oops # 2 oops.odd.periods # # Comments for each command: # Get the list of changes including Added Copied Modified. See other options: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203 # Filter down to just the files that end in pdf or tex # Remove the extension. # Sort the list in preparation for uniq # Show only unique lines and include the count counts=$(git diff --cached --name-only --diff-filter=ACM | awk '/\.pdf|\.tex$/ {print}' | awk -F. 'BEGIN { OFS = FS }; NF { NF -= 1 }; {print $0};' | sort | uniq -c) # Print the output of $counts # Check if any of the counts are more than 1. Which would mean there are 2 files with the same name but different extension. if echo "$counts" | awk '$1 > 1 {exit 1}' then echo "No generated files detected in commit." # Allow git commit. exit 0 else echo "The following file names look generated. Remove them or skip this check with SKIP_PDF_CHECK=1 git commit"; # Print the output of $counts # For all lines where echo "$counts" | awk '$1 > 1 {print $2}' # Prevent git commit. exit 1 fi ``` This script will now run every time you do `git commit`. If you want to skip this check for whatever reason you can do `SKIP_PDF_CHECK=1 git commit`. You can do pretty much any algorithm for detecting generated files since the hook is just a shell script. I will also caveat that script hasn't been tested thoroughly. It may not work with things like emojiis in filenames and such.