-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit.ps1
More file actions
121 lines (120 loc) · 3.4 KB
/
git.ps1
File metadata and controls
121 lines (120 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<#
.SYNOPSIS
An assortment of functions for working with Git.
.EXAMPLE
. .\git.ps1
Imports the Git functions.
#>
function gitACP {
<#
.SYNOPSIS
Runs `git add -A`, `git commit -m $Message`, and `git push` in one command.
.EXAMPLE
gitACP 'Added new file'
This runs `git add -A` to add all modified files to the commit. It then runs `git commit -m 'Added new file'`. Finally, it pushes the changes to the remote destination with `git push`.
.EXAMPLE
gitACP 'Added new file' -Submodules
With the `-Submodules` switch, this pulls in all new updates from any submodules. It then runs `git add -A` to add all modified files to the commit. It then runs `git commit -m 'Added new file'`. Finally, it pushes the changes to the remote destination with `git push`.
#>
[Alias('acp')]
[CmdletBinding()]
param (
[Parameter(
Mandatory = $true
)]
[string] $Message,
[switch] $Submodules
)
git status -s
if ($?){
if ($Submodules){
git submodule update --remote --recursive
}
git add -A
git status -s
git commit -m $Message
git push
}
}
function gitSwitchBack {
<#
.SYNOPSIS
Switches to the specified branch, then waits for instruction to switch back to the original branch.
#>
[CmdletBinding()]
param (
[Parameter(
Mandatory = $true,
Position = 0
)]
[string]$DestinationBranch,
[Parameter(
Position = 1
)]
[string]$SourceBranch
)
if (!$PSBoundParameters.ContainsKey('SourceBranch')){
$SourceBranch = git rev-parse --abbrev-ref HEAD
}
if ($?){
git switch $DestinationBranch
if ($?){
$Msg = "`nPress Enter to switch back to '{0}'" -f $SourceBranch
Read-Host $Msg | Out-Null
git switch $SourceBranch
}
}
}
function gitSingleFile {
<#
.SYNOPSIS
Clones a single file from a repository.
#>
[CmdletBinding()]
param (
[ValidateScript({
if (!($_ -match "\.git$")){
throw [System.Management.Automation.ParameterBindingException] "Invalid repository path."
} else {
$true
}
})]
$RepoPath,
$FilePath
)
$CurrentEA = $ErrorActionPreference
$ErrorActionPreference = "Stop"
$CurrentDir = $(Get-Location).Path
[System.Collections.ArrayList]$RepoNameSplit = (Split-Path $RepoPath -Leaf).Split('.')
$RepoNameSplit.Remove($RepoNameSplit[-1])
[string]$RepoName = $RepoNameSplit -join '.'
git clone -n $RepoPath --depth 1
Push-Location -Path "$CurrentDir/$RepoName"
git checkout HEAD "./$FilePath"
Pop-Location
$ErrorActionPreference = $CurrentEA
return (Get-Item "$CurrentDir/$RepoName/$FilePath")
}
$gitCmdList = @(
'switch'
'branch'
'clone'
'clean'
'prune'
'reset'
'config'
'status'
'log'
'show'
'pull'
'push'
'commit'
'diff'
'checkout'
'add'
)
foreach ($gitCmd in $gitCmdList) {
if (-not (Get-Command $gitCmd -ErrorAction SilentlyContinue)) {
Set-Content -Path function:\$gitCmd -Value "git $gitCmd @args"
}
}